Pārlūkot izejas kodu

Moved adding types to nodes to a separate method.
Changed boolean type hints

Franco Castellacci 9 gadi atpakaļ
vecāks
revīzija
49093d84e6
3 mainītis faili ar 33 papildinājumiem un 46 dzēšanām
  1. 1 2
      lib/Backend/IRBuilder.cpp
  2. 30 44
      lib/Parser/Parse.cpp
  3. 2 0
      lib/Parser/Parse.h

+ 1 - 2
lib/Backend/IRBuilder.cpp

@@ -4522,7 +4522,7 @@ IRBuilder::BuildElementCP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta
                 instr->AsProfiledInstr()->u.FldInfo().valueType = ValueType::Float.SetCanBeTaggedValue(true);
                 break;
             case Js::TypeHint::Bool:
-                instr->AsProfiledInstr()->u.FldInfo().valueType = ValueType::Boolean.SetCanBeTaggedValue(true);
+                instr->AsProfiledInstr()->u.FldInfo().valueType = ValueType::Boolean;
                 break;
             case Js::TypeHint::Object:
                 instr->AsProfiledInstr()->u.FldInfo().valueType = ValueType::UninitializedObject;
@@ -4539,7 +4539,6 @@ IRBuilder::BuildElementCP(Js::OpCode newOpcode, uint32 offset, Js::RegSlot insta
     }
 }
 
-
 ///----------------------------------------------------------------------------
 ///
 /// IRBuilder::BuildElementC2

+ 30 - 44
lib/Parser/Parse.cpp

@@ -3233,28 +3233,7 @@ LFunction :
     //FCASTE: after parsing a term, check if there is a type annotation and parse it
     if (CONFIG_FLAG(TypeAnnotations) && m_token.tk == tkTypeAnnBegin)
     {
-        m_pscan->SetScanState(Scanner_t::ScanState::ScanStateTypeAnnotationMiddle);
-        m_pscan->Scan();
-
-        if (buildAST) 
-        {
-            switch (m_token.tk)
-            {
-            case tkTypeInt:
-                pnode->typeHint = Js::TypeHint::Int;
-                break;
-            case tkTypeFloat:
-                pnode->typeHint = Js::TypeHint::Float;
-                break;
-            case tkTypeBool:
-                pnode->typeHint = Js::TypeHint::Bool;
-                break;
-            case tkTypeObject:
-                pnode->typeHint = Js::TypeHint::Object;
-                break;
-            }
-        }
-        m_pscan->Scan(); //Leave the scanner pointing to the next token
+        AddTypeAnnotationToParseNode<buildAST>(pnode);
     }
     // Pass back identifier if requested
     if (pToken && term.tk == tkID)
@@ -6318,29 +6297,9 @@ void Parser::ParseFncFormals(ParseNodePtr pnodeFnc, ParseNodePtr pnodeParentFnc,
                 //FCASTE: after parsing a term, check if there is a type annotation and parse it
                 if (CONFIG_FLAG(TypeAnnotations) && m_token.tk == tkTypeAnnBegin)
                 {
-                    m_pscan->SetScanState(Scanner_t::ScanState::ScanStateTypeAnnotationMiddle);
-                    m_pscan->Scan();
-
-                    if (buildAST)
-                    {
-                        switch (m_token.tk)
-                        {
-                        case tkTypeInt:
-                            pnodeT->typeHint = Js::TypeHint::Int;
-                            break;
-                        case tkTypeFloat:
-                            pnodeT->typeHint = Js::TypeHint::Float;
-                            break;
-                        case tkTypeBool:
-                            pnodeT->typeHint = Js::TypeHint::Bool;
-                            break;
-                        case tkTypeObject:
-                            pnodeT->typeHint = Js::TypeHint::Object;
-                            break;
-                        }
-                    }
-                    m_pscan->Scan(); //Leave the scanner pointing to the next token
+                    AddTypeAnnotationToParseNode<buildAST>(pnodeT);
                 }
+
                 if (seenRestParameter && m_token.tk != tkRParen && m_token.tk != tkAsg)
                 {
                     Error(ERRRestLastArg);
@@ -6461,6 +6420,33 @@ void Parser::ParseFncFormals(ParseNodePtr pnodeFnc, ParseNodePtr pnodeParentFnc,
     }
 }
 
+template<bool buildAST>
+void Parser::AddTypeAnnotationToParseNode(ParseNodePtr pnode)
+{
+    m_pscan->SetScanState(Scanner_t::ScanState::ScanStateTypeAnnotationMiddle);
+    m_pscan->Scan();
+
+    if (buildAST)
+    {
+        switch (m_token.tk)
+        {
+        case tkTypeInt:
+            pnode->typeHint = Js::TypeHint::Int;
+            break;
+        case tkTypeFloat:
+            pnode->typeHint = Js::TypeHint::Float;
+            break;
+        case tkTypeBool:
+            pnode->typeHint = Js::TypeHint::Bool;
+            break;
+        case tkTypeObject:
+            pnode->typeHint = Js::TypeHint::Object;
+            break;
+        }
+    }
+    m_pscan->Scan(); //Leave the scanner pointing to the next token
+}
+
 template<bool buildAST>
 ParseNodePtr Parser::GenerateModuleFunctionWrapper()
 {

+ 2 - 0
lib/Parser/Parse.h

@@ -311,6 +311,8 @@ public:
     void WaitForBackgroundJobs(BackgroundParser *bgp, CompileScriptException *pse);
     HRESULT ParseFunctionInBackground(ParseNodePtr pnodeFunc, ParseContext *parseContext, bool topLevelDeferred, CompileScriptException *pse);
 
+    template<bool buildAST> void AddTypeAnnotationToParseNode(ParseNodePtr pnode);
+
     void CheckPidIsValid(IdentPtr pid, bool autoArgumentsObject = false);
     void AddVarDeclToBlock(ParseNode *pnode);
     // Add a var declaration. Only use while parsing. Assumes m_ppnodeVar is pointing to the right place already