コード例 #1
0
 def testGetFormsBreak6(self):
     st = """break from `$blockName
             x=3"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [(ATOM_TYPE, "return-from"),
                                           (SHORTCUT_TYPE, "`",
                                            (SHORTCUT_TYPE, ",",
                                             (ATOM_TYPE, "blockName"))),
                                           (FORM_TYPE, [])]),
                              (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                           (ATOM_TYPE, "x"),
                                           (ATOM_TYPE, "3")])])
コード例 #2
0
 def testGetFormsOperForm19(self):
     st = """x+y**d**c-z"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "_-_"),
         (FORM_TYPE, [(ATOM_TYPE, "_+_"), (ATOM_TYPE, "x"),
                      (FORM_TYPE, [(ATOM_TYPE, "_**_"), (ATOM_TYPE, "y"),
                                   (FORM_TYPE, [(ATOM_TYPE, "_**_"),
                                                (ATOM_TYPE, "d"),
                                                (ATOM_TYPE, "c")])])]),
         (ATOM_TYPE, "z")
     ])])
コード例 #3
0
 def testGetFormsLetList5(self):
     st = """let (x,y=a=5) {y}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "let"),
         (FORM_TYPE, [(ATOM_TYPE, "x"),
                      (FORM_TYPE, [(ATOM_TYPE, "y"),
                                   (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                (ATOM_TYPE, "a"),
                                                (ATOM_TYPE, "5")])])]),
         (ATOM_TYPE, "y")
     ])])
コード例 #4
0
 def testGetFormsDoLists7(self):
     st = """do (a=0->a+b,b=1) {a}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "do"),
         (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "a"), (ATOM_TYPE, "0"),
                                   (FORM_TYPE, [(ATOM_TYPE, "_+_"),
                                                (ATOM_TYPE, "a"),
                                                (ATOM_TYPE, "b")])]),
                      (FORM_TYPE, [(ATOM_TYPE, "b"), (ATOM_TYPE, "1")])]),
         (FORM_TYPE, [(ATOM_TYPE, LISP_NIL)]), (ATOM_TYPE, "a")
     ])])
コード例 #5
0
 def testGetFormsMacLambdaList1(self):
     st = """mac foo(a,.(**body),b=5=?bPresent) {}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "defmacro"), (ATOM_TYPE, "foo"),
         (FORM_TYPE, [(ATOM_TYPE, "a"),
                      (FORM_TYPE, [(ATOM_TYPE, "&body"),
                                   (ATOM_TYPE, "body")]),
                      (ATOM_TYPE, "&optional"),
                      (FORM_TYPE, [(ATOM_TYPE, "b"), (ATOM_TYPE, "5"),
                                   (ATOM_TYPE, "bPresent")])])
     ])])
コード例 #6
0
 def testGetFormsOperForm20(self):
     st = """x+~(foo,a+b)-z"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "_-_"),
         (FORM_TYPE, [(ATOM_TYPE, "_+_"), (ATOM_TYPE, "x"),
                      (FORM_TYPE, [(ATOM_TYPE, "foo"),
                                   (FORM_TYPE, [(ATOM_TYPE, "_+_"),
                                                (ATOM_TYPE, "a"),
                                                (ATOM_TYPE, "b")])])]),
         (ATOM_TYPE, "z"),
     ])])
コード例 #7
0
 def testGetFormsBlockForm5(self):
     st = """def foo() {
                 progn{~(), ~()}
                 ~()}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms,
                      [(FORM_TYPE, [(ATOM_TYPE, "defun"),
                                    (ATOM_TYPE, "foo"), (FORM_TYPE, []),
                                    (FORM_TYPE, [(ATOM_TYPE, "progn"),
                                                 (FORM_TYPE, []),
                                                 (FORM_TYPE, [])]),
                                    (FORM_TYPE, [])])])
コード例 #8
0
 def testGetFormsDoLists4(self):
     st = """do () (a==2,"Some computed form","Return result") {a}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "do"), (FORM_TYPE, []),
                       (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "_==_"),
                                                 (ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, "2")]),
                                    (ATOM_TYPE, "\"Some computed form\""),
                                    (ATOM_TYPE, "\"Return result\"")]),
                       (ATOM_TYPE, "a")])])
コード例 #9
0
 def testGetFormDict4(self):
     st = """x={a
                b->45-y}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "setf"), (ATOM_TYPE, "x"),
                       (FORM_TYPE, [(ATOM_TYPE, "_make-hash-table_"),
                                    (ATOM_TYPE, "a"), (ATOM_TYPE, "nil"),
                                    (ATOM_TYPE, "b"),
                                    (FORM_TYPE, [(ATOM_TYPE, "_-_"),
                                                 (ATOM_TYPE, "45"),
                                                 (ATOM_TYPE, "y")])])])])
コード例 #10
0
 def testGetFormsObjSlots1(self):
     st = """x.a=y.a"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms,
                      [(FORM_TYPE, [(ATOM_TYPE, "setf"),
                                    (FORM_TYPE, [(ATOM_TYPE, "slot-value"),
                                                 (ATOM_TYPE, "x"),
                                                 (SHORTCUT_TYPE, "'",
                                                  (ATOM_TYPE, "a"))]),
                                    (FORM_TYPE, [(ATOM_TYPE, "slot-value"),
                                                 (ATOM_TYPE, "y"),
                                                 (SHORTCUT_TYPE, "'",
                                                  (ATOM_TYPE, "a"))])])])
コード例 #11
0
    def testGetFormsString3(self):
        st = """x="Hello,
the"+" brave,
  new
   World!" """
        forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
        self.assertEqual(forms,
                         [(FORM_TYPE, [(ATOM_TYPE, "setf"), (ATOM_TYPE, "x"),
                                       (FORM_TYPE, [(ATOM_TYPE, "_+_"),
                                                    (ATOM_TYPE, """\"Hello,
the\""""), (ATOM_TYPE, """\" brave,
  new
   World!\"""")])])])
コード例 #12
0
 def testGetFormsReturn3(self):
     st = """def foo {return a@b@c}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "defun"), (ATOM_TYPE, "foo"),
                       (FORM_TYPE, []),
                       (FORM_TYPE, [(ATOM_TYPE, "return-from"),
                                    (ATOM_TYPE, "foo"),
                                    (FORM_TYPE, [(ATOM_TYPE, "values"),
                                                 (ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, "b"),
                                                 (ATOM_TYPE, "c")])])])])
コード例 #13
0
 def testGetFormsOperForm23(self):
     st = """a@b@c=x@y@z"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms,
                      [(FORM_TYPE, [(ATOM_TYPE, "setf"),
                                    (FORM_TYPE, [(ATOM_TYPE, "values"),
                                                 (ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, "b"),
                                                 (ATOM_TYPE, "c")]),
                                    (FORM_TYPE, [(ATOM_TYPE, "values"),
                                                 (ATOM_TYPE, "x"),
                                                 (ATOM_TYPE, "y"),
                                                 (ATOM_TYPE, "z")])])])
コード例 #14
0
 def testGetFormsClass3(self):
     st = """class foo {
                 a {:type=integer}
                 c}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "defclass"), (ATOM_TYPE, "foo"),
                       (FORM_TYPE, []),
                       (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, ":type"),
                                                 (ATOM_TYPE, "integer")]),
                                    (ATOM_TYPE, "c")])])])
コード例 #15
0
 def testGetFormsIf6(self):
     st = """if (a) {x=b}
             else {foo()}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "cond"),
                       (FORM_TYPE, [(ATOM_TYPE, "a"),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "x"),
                                                 (ATOM_TYPE, "b")])]),
                       (FORM_TYPE, [(ATOM_TYPE, "t"),
                                    (FORM_TYPE, [(ATOM_TYPE, "foo")])])])])
コード例 #16
0
 def testGetFormsBracketForm2(self):
     st = """~(),~()
             ~(),~(~(),~())"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo(), True)
     self.assertEqual(forms,
                      [(COMMENT_TYPE, "; source line # 1"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 1"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 2"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 2"),
                       (FORM_TYPE, [(COMMENT_TYPE, "; source line # 2"),
                                    (FORM_TYPE, []),
                                    (COMMENT_TYPE, "; source line # 2"),
                                    (FORM_TYPE, [])])])
コード例 #17
0
 def testGetFormsDoLists8(self):
     st = """do (a->a+b,b=1) (a==2,"Return result") {a}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "do"),
         (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "a"), (ATOM_TYPE, "nil"),
                                   (FORM_TYPE, [(ATOM_TYPE, "_+_"),
                                                (ATOM_TYPE, "a"),
                                                (ATOM_TYPE, "b")])]),
                      (FORM_TYPE, [(ATOM_TYPE, "b"), (ATOM_TYPE, "1")])]),
         (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "_==_"), (ATOM_TYPE, "a"),
                                   (ATOM_TYPE, "2")]),
                      (ATOM_TYPE, "\"Return result\"")]), (ATOM_TYPE, "a")
     ])])
コード例 #18
0
 def testGetFormsArray1(self):
     st = """x=[s-d,23/45,foo]"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "setf"), (ATOM_TYPE, "x"),
         (FORM_TYPE, [(ATOM_TYPE, "_make-vector_"),
                      (ATOM_TYPE, ":initContent"),
                      (FORM_TYPE, [(ATOM_TYPE, "list"),
                                   (FORM_TYPE, [(ATOM_TYPE, "_-_"),
                                                (ATOM_TYPE, "s"),
                                                (ATOM_TYPE, "d")]),
                                   (ATOM_TYPE, "23/45"),
                                   (ATOM_TYPE, "foo")])])
     ])])
コード例 #19
0
 def testGetFormsBracketForm3(self):
     st = """  ~(),~(), \\ anything to new line will be skipped
             ~(),
             ~(~(),~())"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo(), True)
     self.assertEqual(forms,
                      [(COMMENT_TYPE, "; source line # 1"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 1"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 2"), (FORM_TYPE, []),
                       (COMMENT_TYPE, "; source line # 3"),
                       (FORM_TYPE, [(COMMENT_TYPE, "; source line # 3"),
                                    (FORM_TYPE, []),
                                    (COMMENT_TYPE, "; source line # 3"),
                                    (FORM_TYPE, [])])])
コード例 #20
0
 def testGetFormsUse4(self):
     st = """use foo {x}
             func(x)
             func(:x)
             func(cl:x)
             func(cl::x)"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [(ATOM_TYPE, "func"),
                                           (ATOM_TYPE, "foo:x")]),
                              (FORM_TYPE, [(ATOM_TYPE, "func"),
                                           (ATOM_TYPE, ":x")]),
                              (FORM_TYPE, [(ATOM_TYPE, "func"),
                                           (ATOM_TYPE, "cl:x")]),
                              (FORM_TYPE, [(ATOM_TYPE, "func"),
                                           (ATOM_TYPE, "cl::x")])])
コード例 #21
0
 def testGetFormsStruct4(self):
     st = """struct foo { a {0,:type=integer}
                          b {1,:&read-only }
                          c}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "defstruct"),
                       (FORM_TYPE, [(ATOM_TYPE, "foo")]),
                       (FORM_TYPE, [(ATOM_TYPE, "a"), (ATOM_TYPE, "0"),
                                    (ATOM_TYPE, ":type"),
                                    (ATOM_TYPE, "integer")]),
                       (FORM_TYPE, [(ATOM_TYPE, "b"), (ATOM_TYPE, "1"),
                                    (ATOM_TYPE, ":read-only")]),
                       (ATOM_TYPE, "c")])])
コード例 #22
0
 def testGetFormsIf2(self):
     st = """if (a) {x=b}
             elif (c) {y=0}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "cond"),
                       (FORM_TYPE, [(ATOM_TYPE, "a"),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "x"),
                                                 (ATOM_TYPE, "b")])]),
                       (FORM_TYPE, [(ATOM_TYPE, "c"),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "y"),
                                                 (ATOM_TYPE, "0")])])])])
コード例 #23
0
 def testGetFormsBodyBlock4(self):
     st = """x=foo{a
                   b=45}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo(), True)
     self.assertEqual(
         forms,
         [(COMMENT_TYPE, "; source line # 1"),
          (FORM_TYPE, [(ATOM_TYPE, "setf"), (ATOM_TYPE, "x"),
                       (FORM_TYPE, [(ATOM_TYPE, "foo"),
                                    (COMMENT_TYPE, "; source line # 1"),
                                    (ATOM_TYPE, "a"),
                                    (COMMENT_TYPE, "; source line # 2"),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "b"),
                                                 (ATOM_TYPE, "45")])])])])
コード例 #24
0
 def testGetFormsImplicitLexscope11(self):
     st = """mac foo (a) {
                 a = 1
                 b = 2}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)),
                      LevelInfo(implScope=True))
     self.assertEqual(forms,
                      [(FORM_TYPE, [(ATOM_TYPE, "defmacro"),
                                    (ATOM_TYPE, "foo"),
                                    (FORM_TYPE, [(ATOM_TYPE, "a")]),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, "1")]),
                                    (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                 (ATOM_TYPE, "b"),
                                                 (ATOM_TYPE, "2")])])])
コード例 #25
0
 def testGetFormsImplicitLexscope2(self):
     st = """progn{
                 foo(x)
                 x=y=1
                 foo(x)}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)),
                      LevelInfo(implScope=True))
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "progn"),
         (FORM_TYPE, [(ATOM_TYPE, "foo"), (ATOM_TYPE, "x")]),
         (FORM_TYPE, [(ATOM_TYPE, "let"),
                      (FORM_TYPE, [(ATOM_TYPE, "y"), (ATOM_TYPE, "x")]),
                      (FORM_TYPE, [(ATOM_TYPE, "setf"), (ATOM_TYPE, "x"),
                                   (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                (ATOM_TYPE, "y"),
                                                (ATOM_TYPE, "1")])]),
                      (FORM_TYPE, [(ATOM_TYPE, "foo"), (ATOM_TYPE, "x")])])
     ])])
コード例 #26
0
 def testGetFormsUse2(self):
     st = """use foo {x=e,y=f,z}
             e(a)
             x(a)
             f(b)
             y(b)
             z(c)"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(forms, [(FORM_TYPE, [(ATOM_TYPE, "foo:x"),
                                           (ATOM_TYPE, "a")]),
                              (FORM_TYPE, [(ATOM_TYPE, "x"),
                                           (ATOM_TYPE, "a")]),
                              (FORM_TYPE, [(ATOM_TYPE, "foo:y"),
                                           (ATOM_TYPE, "b")]),
                              (FORM_TYPE, [(ATOM_TYPE, "y"),
                                           (ATOM_TYPE, "b")]),
                              (FORM_TYPE, [(ATOM_TYPE, "foo:z"),
                                           (ATOM_TYPE, "c")])])
コード例 #27
0
 def testGetFormsImplicitLexscope16(self):
     st = """progn{
                 x @ y = foo()
                 x+y}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)),
                      LevelInfo(implScope=True))
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "progn"),
         (FORM_TYPE, [(ATOM_TYPE, "let"),
                      (FORM_TYPE, [(ATOM_TYPE, "x"), (ATOM_TYPE, "y")]),
                      (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                   (FORM_TYPE, [(ATOM_TYPE, "values"),
                                                (ATOM_TYPE, "x"),
                                                (ATOM_TYPE, "y")]),
                                   (FORM_TYPE, [(ATOM_TYPE, "foo")])]),
                      (FORM_TYPE, [(ATOM_TYPE, "_+_"), (ATOM_TYPE, "x"),
                                   (ATOM_TYPE, "y")])])
     ])])
コード例 #28
0
 def testGetFormsClass4(self):
     st = """class foo {
                 a {:type=integer}
                 c}
               options {:documentation="doc-string"
                        :metaclass=boo}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "defclass"), (ATOM_TYPE, "foo"),
                       (FORM_TYPE, []),
                       (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, ":type"),
                                                 (ATOM_TYPE, "integer")]),
                                    (ATOM_TYPE, "c")]),
                       (FORM_TYPE, [(ATOM_TYPE, ":documentation"),
                                    (ATOM_TYPE, "\"doc-string\"")]),
                       (FORM_TYPE, [(ATOM_TYPE, ":metaclass"),
                                    (ATOM_TYPE, "boo")])])])
コード例 #29
0
 def testGetFormsClass5(self):
     st = """class foo (super1,super2) {
                  a {:type=integer}
                  ; this comment will be dropped outentirely
                  c}
               options {:documentation="doc-string"
                        :metaclass=boo}"""
     forms = getForms(GrowingList(StringIO.StringIO(st)), LevelInfo())
     self.assertEqual(
         forms,
         [(FORM_TYPE, [(ATOM_TYPE, "defclass"), (ATOM_TYPE, "foo"),
                       (FORM_TYPE, [(ATOM_TYPE, "super1"),
                                    (ATOM_TYPE, "super2")]),
                       (FORM_TYPE, [(FORM_TYPE, [(ATOM_TYPE, "a"),
                                                 (ATOM_TYPE, ":type"),
                                                 (ATOM_TYPE, "integer")]),
                                    (ATOM_TYPE, "c")]),
                       (FORM_TYPE, [(ATOM_TYPE, ":documentation"),
                                    (ATOM_TYPE, "\"doc-string\"")]),
                       (FORM_TYPE, [(ATOM_TYPE, ":metaclass"),
                                    (ATOM_TYPE, "boo")])])])
コード例 #30
0
 def testGetFormsImplicitLexscope15(self):
     st = """def foo (a,b=lambda{a=1}) { a=9 }"""
     forms = getForms(GrowingList(StringIO.StringIO(st)),
                      LevelInfo(implScope=True, explScopeWarn=True))
     self.assertEqual(forms, [(FORM_TYPE, [
         (ATOM_TYPE, "defun"), (ATOM_TYPE, "foo"),
         (FORM_TYPE, [(ATOM_TYPE, "a"), (ATOM_TYPE, "&optional"),
                      (FORM_TYPE, [
                          (ATOM_TYPE, "b"),
                          (FORM_TYPE, [
                              (ATOM_TYPE, "lambda"), (FORM_TYPE, []),
                              (FORM_TYPE, [(ATOM_TYPE, "let"),
                                           (FORM_TYPE, [(ATOM_TYPE, "a")]),
                                           (FORM_TYPE, [(ATOM_TYPE, "setf"),
                                                        (ATOM_TYPE, "a"),
                                                        (ATOM_TYPE, "1")])])
                          ])
                      ])]),
         (FORM_TYPE, [(ATOM_TYPE, "setf"), (ATOM_TYPE, "a"),
                      (ATOM_TYPE, "9")])
     ])])