summaryrefslogtreecommitdiff
path: root/chapter12/src/main/java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-07-30 06:49:44 -0700
committerDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2024-08-05 23:28:33 +0100
commit0269769b929a07f8057c632bd7d645185649359f (patch)
treebbe677996bcbfba6fe1cf649b749e516218d00b4 /chapter12/src/main/java
parent5c48e9fde3185710892815af3adc992585486a24 (diff)
downloadSimple-0269769b929a07f8057c632bd7d645185649359f.tar.gz
Simple-0269769b929a07f8057c632bd7d645185649359f.zip
auto-widen on assign
Diffstat (limited to 'chapter12/src/main/java')
-rw-r--r--chapter12/src/main/java/com/seaofnodes/simple/Parser.java10
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