diff options
| author | Cliff Click <cliffc@acm.org> | 2024-07-30 06:49:44 -0700 |
|---|---|---|
| committer | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2024-08-05 23:28:33 +0100 |
| commit | 0269769b929a07f8057c632bd7d645185649359f (patch) | |
| tree | bbe677996bcbfba6fe1cf649b749e516218d00b4 /chapter12/src/main/java/com | |
| parent | 5c48e9fde3185710892815af3adc992585486a24 (diff) | |
| download | Simple-0269769b929a07f8057c632bd7d645185649359f.tar.gz Simple-0269769b929a07f8057c632bd7d645185649359f.zip | |
auto-widen on assign
Diffstat (limited to 'chapter12/src/main/java/com')
| -rw-r--r-- | chapter12/src/main/java/com/seaofnodes/simple/Parser.java | 10 |
1 files changed, 5 insertions, 5 deletions
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 |
