From 0269769b929a07f8057c632bd7d645185649359f Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 30 Jul 2024 06:49:44 -0700 Subject: auto-widen on assign --- chapter12/src/main/java/com/seaofnodes/simple/Parser.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'chapter12/src/main/java/com') diff --git a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java index 8d26c975..fd705019 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java @@ -427,17 +427,17 @@ public class Parser { if( _scope.define(name,t,expr) == null ) throw error("Redefining name '" + name + "'"); } else { - Node n = _scope.lookup(name); - t = _scope.lookupDeclaredType(name); - if( n==null ) + if( _scope.lookup(name)==null ) throw error("Undefined name '" + name + "'"); - _scope.update(name,expr); + t = _scope.lookupDeclaredType(name); } + // Auto-widen int to float if( expr._type instanceof TypeInteger && t instanceof TypeFloat ) expr = new ToFloatNode(expr).peephole(); + // Type is sane if( !expr._type.isa(t) ) throw error("Type " + expr._type.str() + " is not of declared type " + t.str()); - return expr; + return _scope.update(name,expr); } // Parse a type-or-null -- cgit v1.2.3