Commit Graph

96 Commits

Author SHA1 Message Date
K. Lange
52427a5147 Add a basic 'with' statement
This is incomplete; it's missing the necessary plumbing to ensure __exit__
still gets called if the inner block returns or raises an exception. TODO
2021-01-09 12:46:59 +09:00
K. Lange
070b4bc356 Add tuple unpacking and 'if' conditions to list comprehensions 2021-01-08 18:00:49 +09:00
K. Lange
fc05327c42 Support unpacking tuples in for ... in ... loops. 2021-01-08 17:42:57 +09:00
K. Lange
8f9c1a4c1d Switch C-style loops to semicolons before I regret having used commas 2021-01-08 17:14:42 +09:00
K. Lange
ace8357c9a List comprehensions should not set their subfunctions to methods; ensures 'self' is an upvalue 2021-01-08 16:53:46 +09:00
K. Lange
ee518f9643 Fix two symbols missing namespacing prefixes 2021-01-08 06:49:27 +09:00
K. Lange
9eb5fb1cad Add ternary (a) if (cond) else (b) 2021-01-07 14:04:42 +09:00
K. Lange
ecb5f1e4ec Attach __doc__ to modules, default to None (but still set) if missing 2021-01-07 11:30:10 +09:00
K. Lange
11e6b79e49 Remove 'export' keyword 2021-01-07 11:15:57 +09:00
K. Lange
fbf4dda818 Fix tracking what should be 'global' through function calls? 2021-01-07 10:39:09 +09:00
K. Lange
902d2222b5 Make modules work like in Python. TODO: module class for better repring 2021-01-07 09:50:58 +09:00
K. Lange
d3d048a3f8 Allow trailing commas in lists, dicts 2021-01-06 21:45:39 +09:00
K. Lange
3898e5e51c Store the names of locals in functions for debugging later 2021-01-06 15:03:56 +09:00
K. Lange
5b19419045 Fix incorrect Compiler* reference in addUpvalue 2021-01-05 23:22:37 +09:00
K. Lange
2a901a71a0 Need to mess with stack slots when import multiple things as locals 2021-01-05 19:47:25 +09:00
K. Lange
a4a4da70df Fixup more kwargs stuff, need to pop values for defaults 2021-01-05 19:01:26 +09:00
K. Lange
ab158260f7 improve disassembly somewhat and add dis module 2021-01-05 15:33:33 +09:00
K. Lange
57455ea80d basic lambda expressions (TODO: needs complex argument lists) 2021-01-05 13:28:45 +09:00
K. Lange
f764c059fe compiler support for tuple expressions 2021-01-05 12:07:55 +09:00
K. Lange
20d5ce47bf Work towards generalizing fast calls 2021-01-05 09:30:23 +09:00
K Lange
ff8ed02ebd Make print() a function before it's too late 2021-01-04 23:34:10 +09:00
K. Lange
873ffb3428 Eat empty line in block? 2021-01-04 19:56:13 +09:00
K. Lange
bfae38538d Need to turn off whitespace eating _before_ the close paren 2021-01-04 19:07:19 +09:00
K. Lange
61a38f3a5f That dup isn't necessary 2021-01-04 18:15:17 +09:00
K. Lange
b93429d6a6 Oops, fix strings; simplify bytecode around getters/setters; use this approach for slicing 2021-01-04 18:10:55 +09:00
K. Lange
cfecb2e4f6 Accept BIG_STRING as __doc__ 2021-01-04 16:20:01 +09:00
K. Lange
583df9141c 'not in' comparison 2021-01-04 14:03:08 +09:00
K. Lange
b8c89c0550 add ValueError to builtin exceptions 2021-01-04 11:27:33 +09:00
K. Lange
90a4dd678d Ignore line feeds and indentation in some contexts 2021-01-04 09:49:56 +09:00
K. Lange
132542c6ab allow 'elif' for Python compatibility 2021-01-04 09:13:39 +09:00
K. Lange
3415fd4e73 from foo import bar as baz 2021-01-04 07:48:56 +09:00
K. Lange
8ef070bf94 Support 'from foo import bar, baz' 2021-01-04 07:47:05 +09:00
K. Lange
d1d6a7a3fe 'let' should support multiple comma-separated declarations 2021-01-04 07:40:29 +09:00
K. Lange
aa1c0c8e93 Support 'import foo as bar' 2021-01-04 07:39:00 +09:00
K. Lange
2ee154ecf7 Add argument expansions... 2021-01-03 18:13:17 +09:00
K. Lange
36716e3508 Support * and ** in function signatures for collections of additional arguments and keyword args 2021-01-03 16:02:50 +09:00
K. Lange
3f848dba19 merge string constants like Python does 2021-01-03 14:20:55 +09:00
K. Lange
8ad29f7891 Ditch character literals and add single, triple strings 2021-01-03 14:09:45 +09:00
K. Lange
76e70b79d0 Add default argument values.
Unlike in Python, I'm taking the approach of evaluating these at function
call time rather than definition time. Assigning things like empty lists/dicts
to default arguments has always been a ridiculous thing in Python, and I don't
want to make that mistake. I'm pretty sure Python only continues to do that
because it was something they didn't want to break for backwards compatibility
reasons even in Python 3.
2021-01-03 12:32:04 +09:00
K. Lange
e46d753999 Basic support for keyword arguments when calling functions. 2021-01-03 12:09:41 +09:00
K. Lange
93af369b8c Quietly pretend we didn't just do that different from Python for no reason 2021-01-03 09:29:09 +09:00
K. Lange
31751745cd How did I not catch that earlier... need to _check_, not match, EOL on return statement 2021-01-03 09:15:50 +09:00
K. Lange
b676df69da Add method decorators
This required a new approach for handling function arguments.

Methods remain the same: the callee object is on the stack and positioned
to be "argument 0". Non-methods have changed so that "argument 0" is the
first argument, with the function still remaining before that. When a
non-method is called, we track this fact so that we can continue to restore
the stack to the correct height to get rid of the function. This allows
a method decorator to be defined exactly like it would be in Python

def methodDecorator(func):
    def wrappedMethod(instance, someOtherArg):
        print "Do something with the arg:", someOtherArg
        func(instance)

class Foo():
    @methodDecorator
    def func():
        print "I only take an implicit self:", self

let f = Foo()
f.func("but that other arg is needed")
2021-01-03 08:43:32 +09:00
K. Lange
1de1fbc150 Basic non-method decorator support? 2021-01-02 21:58:24 +09:00
K. Lange
542e219192 Redefine list comprehension and add infix in 2021-01-02 19:46:21 +09:00
K. Lange
b1b747b234 Some improvements to debug output before I move on to a marshalling format 2021-01-02 13:42:07 +09:00
K. Lange
7b506e6190 actually use OP_CALL_LONG 2021-01-02 12:52:12 +09:00
K. Lange
6164c3ebf4 General code cleanup. 2021-01-02 12:21:11 +09:00
K. Lange
9211b04fc1 Add 'else if'; don't do Python's elif thing, I don't like that. 2021-01-02 12:13:01 +09:00
K. Lange
b42844f842 Fully internalize list+dict core methods and implement invokes for getters/setters 2021-01-01 20:52:18 +09:00