diff --git a/src/main/java/chocopy/pa2/DeclarationAnalyzer.java b/src/main/java/chocopy/pa2/DeclarationAnalyzer.java
index 839bf960b6013de6f9d49bddab13c254eaa4a4d6..8a135a4e8a1cfa868ac3b62a8a6dfd1b555ffbee 100644
--- a/src/main/java/chocopy/pa2/DeclarationAnalyzer.java
+++ b/src/main/java/chocopy/pa2/DeclarationAnalyzer.java
@@ -60,7 +60,6 @@ public class DeclarationAnalyzer extends AbstractNodeAnalyzer<SymbolType> {
     @Override
     public SymbolType analyze(ClassDef classDef) {
         System.out.println("debug: classdef");
-        // TODO: check how do I create a obj type.
         return new ClassValueType(classDef.name.name);
     }
 
@@ -69,6 +68,7 @@ public class DeclarationAnalyzer extends AbstractNodeAnalyzer<SymbolType> {
         System.out.println("debug: start funcDef: " + funcDef.getClass().getName());
         assert funcDef.symTable == null;
         sym = funcDef.symTable = new SymbolTable<SymbolType>(sym);
+        assert funcDef.symTable != null; // may suck if partial-compiling happens...
 
         // Func parameter list
         for(TypedVar param : funcDef.params) {
@@ -85,6 +85,30 @@ public class DeclarationAnalyzer extends AbstractNodeAnalyzer<SymbolType> {
         return new FuncType(ValueType.annotationToValueType(funcDef.returnType));
     }
 
+    @Override
+    public SymbolType analyze(GlobalDecl globalDecl) {
+        String name = globalDecl.variable.name;
+        SymbolType T = globals.get(name);
+        if(T == null)
+            errors.semError(globalDecl, "global id '" + name + "' not found in global scope..");
+        if(sym == globals)
+            errors.semError(globalDecl, "global declaration '" + name + "' not allowed in global scope.");
+        //sym.put(name, T);
+        return T;
+    }
+
+    @Override
+    public SymbolType analyze(NonLocalDecl nonLocalDecl) {
+        String name = nonLocalDecl.variable.name;
+        SymbolType T = sym.get(name); // auto-iterate through the tree.
+        if(T == null)
+            errors.semError(nonLocalDecl, "nonlocal id '" + name + "' not found in parent scope..");
+        if(sym == globals)
+            errors.semError(nonLocalDecl, "nonlocal declaration '" + name + "' not allowed in global scope.");
+        return T;
+    }
+
+    // Just a helper..
     @Override
     public SymbolType analyze(TypedVar node) {
         return ValueType.annotationToValueType(node.type);