From 5e0377db1ae2efa1642cbd5a8cd84488af1f6e58 Mon Sep 17 00:00:00 2001 From: rjwright Date: Sun, 20 Jul 2014 13:02:09 +1000 Subject: [PATCH 1/3] Small cleanup in ResolveSourceFragments.hs --- .../DeclarationGraph.hs | 0 LICENSE => source/LICENSE | 0 LabelJSAST.hs => source/LabelJSAST.hs | 0 Main.hs => source/Main.hs | 0 ParseJS.hs => source/ParseJS.hs | 0 PrettyPrint.hs => source/PrettyPrint.hs | 12 ++-- .../ResolveSourceFragments.hs | 57 +++++++++---------- TypeRules.hs => source/TypeRules.hs | 2 +- 8 files changed, 35 insertions(+), 36 deletions(-) rename DeclarationGraph.hs => source/DeclarationGraph.hs (100%) rename LICENSE => source/LICENSE (100%) rename LabelJSAST.hs => source/LabelJSAST.hs (100%) rename Main.hs => source/Main.hs (100%) rename ParseJS.hs => source/ParseJS.hs (100%) rename PrettyPrint.hs => source/PrettyPrint.hs (99%) rename ResolveSourceFragments.hs => source/ResolveSourceFragments.hs (91%) rename TypeRules.hs => source/TypeRules.hs (99%) diff --git a/DeclarationGraph.hs b/source/DeclarationGraph.hs similarity index 100% rename from DeclarationGraph.hs rename to source/DeclarationGraph.hs diff --git a/LICENSE b/source/LICENSE similarity index 100% rename from LICENSE rename to source/LICENSE diff --git a/LabelJSAST.hs b/source/LabelJSAST.hs similarity index 100% rename from LabelJSAST.hs rename to source/LabelJSAST.hs diff --git a/Main.hs b/source/Main.hs similarity index 100% rename from Main.hs rename to source/Main.hs diff --git a/ParseJS.hs b/source/ParseJS.hs similarity index 100% rename from ParseJS.hs rename to source/ParseJS.hs diff --git a/PrettyPrint.hs b/source/PrettyPrint.hs similarity index 99% rename from PrettyPrint.hs rename to source/PrettyPrint.hs index c4e0d05..e8268cb 100644 --- a/PrettyPrint.hs +++ b/source/PrettyPrint.hs @@ -19,12 +19,12 @@ -- -- Top level functions are: -- - -- mapPrintASTWS - -- (jsastListWSMakeSourceFragments - -- (getJSASTWithSource (parseTree program file) file) - -- span) - -- padding - -- printSrc +-- mapPrintASTWS +-- (jsastListWSMakeSourceFragments +-- (getJSASTWithSource (parseTree program file) file) +-- span) +-- padding +-- printSrc -- -- mapPrintASTChild -- (label diff --git a/ResolveSourceFragments.hs b/source/ResolveSourceFragments.hs similarity index 91% rename from ResolveSourceFragments.hs rename to source/ResolveSourceFragments.hs index 75dbc37..e8a0ccb 100644 --- a/ResolveSourceFragments.hs +++ b/source/ResolveSourceFragments.hs @@ -38,7 +38,6 @@ module ResolveSourceFragments , SourceFragment(..) , ValueWithSourceFragment(..) , jsastListWSMakeSourceFragments -, jsastMakeSourceFragment ) where @@ -51,7 +50,7 @@ type Row = Int type Col = Int -- (FileName, StartRow, StartCol, EndRow, EndCol) -type SourceFragment = (String, Row, Col, Row, Col) +type SourceFragment = (SourceFileName, Row, Col, Row, Col) -- Represent literal values. data ValueWithSourceFragment = @@ -131,27 +130,27 @@ jsastListWSMakeSourceFragments (list, fileName) nextSpan = -- sibling) jsastListMakeSourceFragments :: [JSASTWithSourceSpan] -> SourceFileName -> SrcSpan -> [JSASTWithSourceFragment] jsastListMakeSourceFragments (x:y:z) fileName nextSpan = - (jsastMakeSourceFragment x fileName (jsastGetSpan y)):(jsastListMakeSourceFragments (y:z) fileName nextSpan) + (jsastMakeSourceFragment x fileName (jsastGetSource y)):(jsastListMakeSourceFragments (y:z) fileName nextSpan) jsastListMakeSourceFragments (x:[]) fileName nextSpan = [jsastMakeSourceFragment x fileName nextSpan] jsastListMakeSourceFragments [] _ nextSpan = [] -jsastGetSpan :: JSASTWithSourceSpan -> SrcSpan -jsastGetSpan (AWSS _ srcSpan) = srcSpan +jsastGetSource :: JSASTWithSourceSpan -> SrcSpan +jsastGetSource (AWSS _ srcSpan) = srcSpan -exprGetSpan :: ExprWithSourceSpan -> SrcSpan -exprGetSpan (EWSS _ srcSpan) = srcSpan +exprGetSource :: ExprWithSourceSpan -> SrcSpan +exprGetSource (EWSS _ srcSpan) = srcSpan -maybeExprGetSpan :: Maybe ExprWithSourceSpan -> Maybe SrcSpan -maybeExprGetSpan (Just (EWSS _ srcSpan)) = Just srcSpan -maybeExprGetSpan Nothing = Nothing +maybeExprGetSource :: Maybe ExprWithSourceSpan -> Maybe SrcSpan +maybeExprGetSource (Just (EWSS _ srcSpan)) = Just srcSpan +maybeExprGetSource Nothing = Nothing exprListMakeSourceFragments :: [ExprWithSourceSpan] -> SourceFileName -> SrcSpan -> [ExprWithSourceFragment] exprListMakeSourceFragments (x:y:z) fileName nextSpan = - (exprMakeSourceFragment x fileName (exprGetSpan y)):(exprListMakeSourceFragments (y:z) fileName nextSpan) + (exprMakeSourceFragment x fileName (exprGetSource y)):(exprListMakeSourceFragments (y:z) fileName nextSpan) exprListMakeSourceFragments (x:[]) fileName nextSpan = [exprMakeSourceFragment x fileName nextSpan] exprListMakeSourceFragments [] _ _ = [] @@ -190,54 +189,54 @@ jsastMakeSourceFragment (AWSS (For vars cond expr body) srcSpan) fileName nextSp (WSFor (maybeExprMakeSourceFragment vars fileName varsNextSpan) (maybeExprMakeSourceFragment cond fileName condNextSpan) - (maybeExprMakeSourceFragment expr fileName (jsastGetSpan body)) + (maybeExprMakeSourceFragment expr fileName (jsastGetSource body)) (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) where justSpanGetSpan (Just ss) = ss - condSrcSpan = maybeExprGetSpan cond - exprSrcSpan = maybeExprGetSpan expr + condSrcSpan = maybeExprGetSource cond + exprSrcSpan = maybeExprGetSource expr varsNextSpan = if (not (condSrcSpan == Nothing)) then justSpanGetSpan condSrcSpan else if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else - jsastGetSpan body + jsastGetSource body condNextSpan = if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else - jsastGetSpan body + jsastGetSource body jsastMakeSourceFragment (AWSS (ForVar vars cond expr body) srcSpan) fileName nextSpan = AWSF (WSForVar (exprListMakeSourceFragments vars fileName varsNextSpan) (maybeExprMakeSourceFragment cond fileName condNextSpan) - (maybeExprMakeSourceFragment expr fileName (jsastGetSpan body)) + (maybeExprMakeSourceFragment expr fileName (jsastGetSource body)) (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) where justSpanGetSpan (Just ss) = ss - condSrcSpan = maybeExprGetSpan cond - exprSrcSpan = maybeExprGetSpan expr + condSrcSpan = maybeExprGetSource cond + exprSrcSpan = maybeExprGetSource expr varsNextSpan = if (not (condSrcSpan == Nothing)) then justSpanGetSpan condSrcSpan else if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else - jsastGetSpan body + jsastGetSource body condNextSpan = if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else - jsastGetSpan body + jsastGetSource body jsastMakeSourceFragment (AWSS (ForVarIn var obj body) srcSpan) fileName nextSpan = AWSF (WSForVarIn - (exprMakeSourceFragment var fileName (exprGetSpan obj)) - (exprMakeSourceFragment obj fileName (jsastGetSpan body)) + (exprMakeSourceFragment var fileName (exprGetSource obj)) + (exprMakeSourceFragment obj fileName (jsastGetSource body)) (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) jsastMakeSourceFragment (AWSS (FunctionBody list) srcSpan) fileName nextSpan = @@ -306,26 +305,26 @@ exprMakeSourceFragment (EWSS (Assignment op expr1 expr2) srcSpan) fileName nextS EWSF (WSAssignment op - (exprMakeSourceFragment expr1 fileName (exprGetSpan expr2)) + (exprMakeSourceFragment expr1 fileName (exprGetSource expr2)) (exprMakeSourceFragment expr2 fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) exprMakeSourceFragment (EWSS (Binary op expr1 expr2) srcSpan) fileName nextSpan = EWSF (WSBinary op - (exprMakeSourceFragment expr1 fileName (exprGetSpan expr2)) + (exprMakeSourceFragment expr1 fileName (exprGetSource expr2)) (exprMakeSourceFragment expr2 fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) exprMakeSourceFragment (EWSS (Call expr1 expr2) srcSpan) fileName nextSpan = EWSF (WSCall - (exprMakeSourceFragment expr1 fileName (exprGetSpan expr2)) + (exprMakeSourceFragment expr1 fileName (exprGetSource expr2)) (exprMakeSourceFragment expr2 fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) exprMakeSourceFragment (EWSS (CallExpression expr op callExpr) srcSpan) fileName nextSpan = EWSF (WSCallExpression - (exprMakeSourceFragment expr fileName (exprGetSpan callExpr)) + (exprMakeSourceFragment expr fileName (exprGetSource callExpr)) op (exprMakeSourceFragment callExpr fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) @@ -343,7 +342,7 @@ exprMakeSourceFragment (EWSS (Identifier var) srcSpan) fileName nextSpan = exprMakeSourceFragment (EWSS (Index expr1 expr2) srcSpan) fileName nextSpan = EWSF (WSIndex - (exprMakeSourceFragment expr1 fileName (exprGetSpan expr2)) + (exprMakeSourceFragment expr1 fileName (exprGetSource expr2)) (exprMakeSourceFragment expr2 fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) exprMakeSourceFragment (EWSS (List list) srcSpan) fileName nextSpan = @@ -360,7 +359,7 @@ exprMakeSourceFragment (EWSS (PropNameValue name expr) srcSpan) fileName nextSpa exprMakeSourceFragment (EWSS (Reference expr1 expr2) srcSpan) fileName nextSpan = EWSF (WSReference - (exprMakeSourceFragment expr1 fileName (exprGetSpan expr2)) + (exprMakeSourceFragment expr1 fileName (exprGetSource expr2)) (exprMakeSourceFragment expr2 fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) exprMakeSourceFragment (EWSS (UnaryPost op expr) srcSpan) fileName nextSpan = diff --git a/TypeRules.hs b/source/TypeRules.hs similarity index 99% rename from TypeRules.hs rename to source/TypeRules.hs index 883832c..61e39ec 100644 --- a/TypeRules.hs +++ b/source/TypeRules.hs @@ -501,7 +501,7 @@ exprChildRules (LabReference ex1 ex2, n, sourceFragment) dIDs = -- bracket notation. There is no way to differentiate between the two using local static analysis. exprChildRules (LabIndex ex1 ex2, n, sourceFragment) dIDs = (exprChildRules ex1 dIDs) - -- I don't really want to require the index to be an int literal or a string literal.In the case + -- I don't really want to require the index to be an int literal or a string literal. In the case -- of arrays, we don't care about the types of particular elements, we justcare that all -- elements have the same type. Of course this is not the case for objects,since we need to know -- which property of the object we are modifying so we can check itstype (i.e. the *value* of From cecde20b0e21e16823f8667ca461ec80e11b00d5 Mon Sep 17 00:00:00 2001 From: rjwright Date: Sun, 20 Jul 2014 17:33:26 +1000 Subject: [PATCH 2/3] Small cleanup --- source/ParseJS.hs | 2 + source/ResolveSourceFragments.hs | 64 ++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/source/ParseJS.hs b/source/ParseJS.hs index db67bb6..cf833db 100644 --- a/source/ParseJS.hs +++ b/source/ParseJS.hs @@ -250,7 +250,9 @@ listToJSASTExpression [(NS (JSUnary operator) srcSpan), (NS (JSDecimal x) _)] else EWSS (Value xInt) srcSpan where + xFloat :: Value xFloat = JSFloat (-1 * (read x)) + xInt :: Value xInt = JSInt (-1 * (read x)) listToJSASTExpression ((NS (JSUnary operator) srcSpan):x) | elem operator ["-", "+", "--", "++", "!", "typeof ", "delete ", "~"] = diff --git a/source/ResolveSourceFragments.hs b/source/ResolveSourceFragments.hs index e8a0ccb..cb4bdca 100644 --- a/source/ResolveSourceFragments.hs +++ b/source/ResolveSourceFragments.hs @@ -29,6 +29,8 @@ -- -- Top level function is -- (jsastListWSMakeSourceFragments (getJSASTWithSource (parseTree program file) file) span) +-- + module ResolveSourceFragments ( ExprWithSourceFragment(..) @@ -52,21 +54,19 @@ type Col = Int -- (FileName, StartRow, StartCol, EndRow, EndCol) type SourceFragment = (SourceFileName, Row, Col, Row, Col) --- Represent literal values. + data ValueWithSourceFragment = WSArray [ExprWithSourceFragment] | WSBool Bool - -- Double quote strings are never treated differently to normal strings. - -- TODO: Should be merged with JSString | WSDQString String | WSFloat Double | WSInt Int | WSNull - -- TODO: Comment on what the expressions can be. | WSObject [ExprWithSourceFragment] | WSString String | WSUndefined deriving (Show) + data ExprWSF = WSArguments [ExprWithSourceFragment] | WSAssignment Operator ExprWithSourceFragment ExprWithSourceFragment @@ -90,6 +90,7 @@ data ExprWSF = | WSValue ValueWithSourceFragment | WSVarDeclaration Variable (Maybe ExprWithSourceFragment) deriving (Show) + data JSASTWSF = WSBlock [JSASTWithSourceFragment] | WSCase ExprWithSourceFragment JSASTWithSourceFragment @@ -97,9 +98,17 @@ data JSASTWSF = | WSDefault JSASTWithSourceFragment | WSDoWhile JSASTWithSourceFragment ExprWithSourceFragment | WSFinally JSASTWithSourceFragment - | WSFor (Maybe ExprWithSourceFragment) (Maybe ExprWithSourceFragment) (Maybe ExprWithSourceFragment) JSASTWithSourceFragment + | WSFor + (Maybe ExprWithSourceFragment) + (Maybe ExprWithSourceFragment) + (Maybe ExprWithSourceFragment) + JSASTWithSourceFragment | WSForIn [Variable] ExprWithSourceFragment JSASTWithSourceFragment - | WSForVar [ExprWithSourceFragment] (Maybe ExprWithSourceFragment) (Maybe ExprWithSourceFragment) JSASTWithSourceFragment + | WSForVar + [ExprWithSourceFragment] + (Maybe ExprWithSourceFragment) + (Maybe ExprWithSourceFragment) + JSASTWithSourceFragment | WSForVarIn ExprWithSourceFragment ExprWithSourceFragment JSASTWithSourceFragment | WSFunctionBody [JSASTWithSourceFragment] | WSFunctionDeclaration Variable [Variable] JSASTWithSourceFragment @@ -121,17 +130,21 @@ data ExprWithSourceFragment = -- nextSpan is the list's parent's next sibling (or the end of the file, if the parent has no next -- sibling) -jsastListWSMakeSourceFragments :: ([JSASTWithSourceSpan], SourceFileName) -> SrcSpan -> [JSASTWithSourceFragment] +jsastListWSMakeSourceFragments :: ([JSASTWithSourceSpan], SourceFileName) -> SrcSpan -> + [JSASTWithSourceFragment] jsastListWSMakeSourceFragments (list, fileName) nextSpan = jsastListMakeSourceFragments list fileName nextSpan -- nextSpan is the list's parent's next sibling (or the end of the file, if the parent has no next -- sibling) -jsastListMakeSourceFragments :: [JSASTWithSourceSpan] -> SourceFileName -> SrcSpan -> [JSASTWithSourceFragment] +jsastListMakeSourceFragments :: [JSASTWithSourceSpan] -> SourceFileName -> SrcSpan -> + [JSASTWithSourceFragment] jsastListMakeSourceFragments (x:y:z) fileName nextSpan = - (jsastMakeSourceFragment x fileName (jsastGetSource y)):(jsastListMakeSourceFragments (y:z) fileName nextSpan) -jsastListMakeSourceFragments (x:[]) fileName nextSpan = [jsastMakeSourceFragment x fileName nextSpan] + (jsastMakeSourceFragment x fileName (jsastGetSource y)): + (jsastListMakeSourceFragments (y:z) fileName nextSpan) +jsastListMakeSourceFragments (x:[]) fileName nextSpan = + [jsastMakeSourceFragment x fileName nextSpan] jsastListMakeSourceFragments [] _ nextSpan = [] @@ -148,9 +161,11 @@ maybeExprGetSource (Just (EWSS _ srcSpan)) = Just srcSpan maybeExprGetSource Nothing = Nothing -exprListMakeSourceFragments :: [ExprWithSourceSpan] -> SourceFileName -> SrcSpan -> [ExprWithSourceFragment] +exprListMakeSourceFragments :: [ExprWithSourceSpan] -> SourceFileName -> SrcSpan -> + [ExprWithSourceFragment] exprListMakeSourceFragments (x:y:z) fileName nextSpan = - (exprMakeSourceFragment x fileName (exprGetSource y)):(exprListMakeSourceFragments (y:z) fileName nextSpan) + (exprMakeSourceFragment x fileName (exprGetSource y)): + (exprListMakeSourceFragments (y:z) fileName nextSpan) exprListMakeSourceFragments (x:[]) fileName nextSpan = [exprMakeSourceFragment x fileName nextSpan] exprListMakeSourceFragments [] _ _ = [] @@ -160,7 +175,7 @@ makeSourceFragment (SpanPoint _ startRow startCol) (SpanPoint _ nextRow nextCol) (fileName, startRow, startCol, nextRow, nextCol) --- Here nextSpan is just the end of this fragment +-- Here nextSpan is just the end of this fragment. -- Still to do -- WSCase ExprWithSourceFragment JSASTWithSourceFragment -- WSCatch Variable (Maybe ExprWithSourceFragment) JSASTWithSourceFragment @@ -174,7 +189,8 @@ makeSourceFragment (SpanPoint _ startRow startCol) (SpanPoint _ nextRow nextCol) -- WSSwitch ExprWithSourceFragment JSASTWithSourceFragment -- WSTry JSASTWithSourceFragment JSASTWithSourceFragment -- WSWhile ExprWithSourceFragment JSASTWithSourceFragment -jsastMakeSourceFragment :: JSASTWithSourceSpan -> SourceFileName -> SrcSpan -> JSASTWithSourceFragment +jsastMakeSourceFragment :: JSASTWithSourceSpan -> SourceFileName -> SrcSpan -> + JSASTWithSourceFragment -- jsastMakeSourceFragment (AWSS () srcSpan) fileName nextSpan = -- AWSF -- (WS...) @@ -193,9 +209,11 @@ jsastMakeSourceFragment (AWSS (For vars cond expr body) srcSpan) fileName nextSp (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) where - justSpanGetSpan (Just ss) = ss + condSrcSpan :: Maybe SrcSpan condSrcSpan = maybeExprGetSource cond + exprSrcSpan :: Maybe SrcSpan exprSrcSpan = maybeExprGetSource expr + varsNextSpan :: SrcSpan varsNextSpan = if (not (condSrcSpan == Nothing)) then justSpanGetSpan condSrcSpan @@ -203,11 +221,14 @@ jsastMakeSourceFragment (AWSS (For vars cond expr body) srcSpan) fileName nextSp justSpanGetSpan exprSrcSpan else jsastGetSource body + condNextSpan :: SrcSpan condNextSpan = if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else jsastGetSource body + justSpanGetSpan :: Maybe SrcSpan -> SrcSpan + justSpanGetSpan (Just ss) = ss jsastMakeSourceFragment (AWSS (ForVar vars cond expr body) srcSpan) fileName nextSpan = AWSF (WSForVar @@ -217,9 +238,11 @@ jsastMakeSourceFragment (AWSS (ForVar vars cond expr body) srcSpan) fileName nex (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) where - justSpanGetSpan (Just ss) = ss + condSrcSpan :: Maybe SrcSpan condSrcSpan = maybeExprGetSource cond + exprSrcSpan :: Maybe SrcSpan exprSrcSpan = maybeExprGetSource expr + varsNextSpan :: SrcSpan varsNextSpan = if (not (condSrcSpan == Nothing)) then justSpanGetSpan condSrcSpan @@ -227,11 +250,14 @@ jsastMakeSourceFragment (AWSS (ForVar vars cond expr body) srcSpan) fileName nex justSpanGetSpan exprSrcSpan else jsastGetSource body + condNextSpan :: SrcSpan condNextSpan = if (not (exprSrcSpan == Nothing)) then justSpanGetSpan exprSrcSpan else jsastGetSource body + justSpanGetSpan :: Maybe SrcSpan -> SrcSpan + justSpanGetSpan (Just ss) = ss jsastMakeSourceFragment (AWSS (ForVarIn var obj body) srcSpan) fileName nextSpan = AWSF (WSForVarIn @@ -249,7 +275,6 @@ jsastMakeSourceFragment (AWSS (FunctionDeclaration var args body) srcSpan) fileN (WSFunctionDeclaration var args - -- The body is the last child of the function declaration,so it has the same end point. (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) jsastMakeSourceFragment (AWSS (Return expr) srcSpan) fileName nextSpan = @@ -266,8 +291,6 @@ valueMakeSourceFragment :: Value -> SourceFileName -> SrcSpan -> ValueWithSource valueMakeSourceFragment (JSArray list) fileName nextSpan = WSArray (exprListMakeSourceFragments list fileName nextSpan) valueMakeSourceFragment (JSBool val) _ _ = WSBool val - -- Double quote strings are never treated differently to normal strings. - -- TODO: Should be merged with JSString valueMakeSourceFragment (JSDQString val) _ _ = WSDQString val valueMakeSourceFragment (JSFloat val) _ _ = WSFloat val valueMakeSourceFragment (JSInt val) _ _ = WSInt val @@ -278,7 +301,8 @@ valueMakeSourceFragment (JSString val) _ _ = WSString val valueMakeSourceFragment JSUndefined _ _ = WSUndefined -maybeExprMakeSourceFragment :: Maybe ExprWithSourceSpan -> SourceFileName -> SrcSpan -> Maybe ExprWithSourceFragment +maybeExprMakeSourceFragment :: Maybe ExprWithSourceSpan -> SourceFileName -> SrcSpan -> + Maybe ExprWithSourceFragment maybeExprMakeSourceFragment (Just exprWithSourceSpan) fileName srcSpan = Just (exprMakeSourceFragment exprWithSourceSpan fileName srcSpan) maybeExprMakeSourceFragment Nothing _ _ = Nothing From 341447c23bc8fd4dee3be6350d770d6c9cec8ead Mon Sep 17 00:00:00 2001 From: rjwright Date: Sun, 20 Jul 2014 18:43:00 +1000 Subject: [PATCH 3/3] Implemented a couple more types jsastMakeSourceFragment --- source/ResolveSourceFragments.hs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/source/ResolveSourceFragments.hs b/source/ResolveSourceFragments.hs index cb4bdca..2c496b4 100644 --- a/source/ResolveSourceFragments.hs +++ b/source/ResolveSourceFragments.hs @@ -182,9 +182,6 @@ makeSourceFragment (SpanPoint _ startRow startCol) (SpanPoint _ nextRow nextCol) -- WSDefault JSASTWithSourceFragment -- WSDoWhile JSASTWithSourceFragment ExprWithSourceFragment -- WSFinally JSASTWithSourceFragment --- WSForIn [Variable] ExprWithSourceFragment JSASTWithSourceFragment --- WSIf ExprWithSourceFragment JSASTWithSourceFragment --- WSIfElse ExprWithSourceFragment JSASTWithSourceFragment JSASTWithSourceFragment -- WSLabelled Variable JSASTWithSourceFragment -- WSSwitch ExprWithSourceFragment JSASTWithSourceFragment -- WSTry JSASTWithSourceFragment JSASTWithSourceFragment @@ -229,6 +226,13 @@ jsastMakeSourceFragment (AWSS (For vars cond expr body) srcSpan) fileName nextSp jsastGetSource body justSpanGetSpan :: Maybe SrcSpan -> SrcSpan justSpanGetSpan (Just ss) = ss +jsastMakeSourceFragment (AWSS (ForIn vars obj body) srcSpan) fileName nextSpan = + AWSF + (WSForIn + vars + (exprMakeSourceFragment obj fileName (jsastGetSource body)) + (jsastMakeSourceFragment body fileName nextSpan)) + (makeSourceFragment srcSpan nextSpan fileName) jsastMakeSourceFragment (AWSS (ForVar vars cond expr body) srcSpan) fileName nextSpan = AWSF (WSForVar @@ -277,6 +281,19 @@ jsastMakeSourceFragment (AWSS (FunctionDeclaration var args body) srcSpan) fileN args (jsastMakeSourceFragment body fileName nextSpan)) (makeSourceFragment srcSpan nextSpan fileName) +jsastMakeSourceFragment (AWSS (If cond body) srcSpan) fileName nextSpan = + AWSF + (WSIf + (exprMakeSourceFragment cond fileName (jsastGetSource body)) + (jsastMakeSourceFragment body fileName nextSpan)) + (makeSourceFragment srcSpan nextSpan fileName) +jsastMakeSourceFragment (AWSS (IfElse cond body elseBody) srcSpan) fileName nextSpan = + AWSF + (WSIfElse + (exprMakeSourceFragment cond fileName (jsastGetSource body)) + (jsastMakeSourceFragment body fileName (jsastGetSource elseBody)) + (jsastMakeSourceFragment elseBody fileName nextSpan)) + (makeSourceFragment srcSpan nextSpan fileName) jsastMakeSourceFragment (AWSS (Return expr) srcSpan) fileName nextSpan = AWSF (WSReturn (exprMakeSourceFragment expr fileName nextSpan))