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