args.c
Go to the documentation of this file.
1 
9 #include "../src/vendor/rline.c"
10 #include <kuroko/vm.h>
11 #include <kuroko/util.h>
12 
13 #define SIMPLE_REPL_ENABLE_RLINE
14 #include "simple-repl.h"
15 
16 KRK_Function(demofunc1) {
17  int a;
18  const char * b = NULL;
19 
20  if (!krk_parseArgs(
21  "iz",
22  (const char *[]){"a","b"},
23  &a,
24  &b
25  )) {
26  return NONE_VAL();
27  }
28 
29  fprintf(stderr, "a=%d\n", a);
30  fprintf(stderr, "b=%s\n", b);
31 
32  return NONE_VAL();
33 }
34 
35 KRK_Function(demofunc2) {
36  int a, b, c;
37  int d = 1;
38  int e = 2;
39  int has_f = 0;
40  int f = 3;
41 
42  if (!krk_parseArgs(
43  "iii|iii?", (const char *[]){"a","b","c","d","e","f"},
44  &a, &b, &c,
45  &d, &e, &has_f, &f)) {
46  return NONE_VAL();
47  }
48 
49  fprintf(stderr, "a=%d\n", a);
50  fprintf(stderr, "b=%d\n", b);
51  fprintf(stderr, "c=%d\n", c);
52  fprintf(stderr, "d=%d\n", d);
53  fprintf(stderr, "e=%d\n", e);
54  fprintf(stderr, "has_f=%d\n", has_f);
55  fprintf(stderr, "f=%d\n", f);
56 
57  return NONE_VAL();
58 }
59 
60 KRK_Function(demofunc3) {
61  KrkValue list, dict, set;
62 
63  if (!krk_parseArgs("V!V!V!",
64  (const char*[]){"a","b","c"},
65  KRK_BASE_CLASS(list), &list,
66  KRK_BASE_CLASS(dict), &dict,
67  KRK_BASE_CLASS(set), &set
68  )) {
69  return NONE_VAL();
70  }
71 
72  return krk_runtimeError(vm.exceptions->valueError,
73  "Correctly passed values: %R %R %R",
74  list, dict, set);
75 }
76 
77 KRK_Function(demofunc4) {
78  int argcount;
79  const KrkValue * args;
80  int a, b = 0, c = 1, d = 2;
81 
82  if (!krk_parseArgs("i|i*$ii",
83  (const char *[]){"a","b","c","d"},
84  &a, &b,
85  &argcount, &args,
86  &c, &d
87  )) {
88  return NONE_VAL();
89  }
90 
91  fprintf(stderr, "a=%d b=%d c=%d d=%d\n", a, b, c, d);
92  fprintf(stderr, "%d extra args\n", argcount);
93 
94 
95  return NONE_VAL();
96 }
97 
98 KRK_Function(takeschars) {
99  int a = 0, b = 0, c = 0;
100 
101  if (!krk_parseArgs(
102  "C|CC", (const char *[]){"a","b","c"},
103  &a, &b, &c)) {
104  return NONE_VAL();
105  }
106 
107  fprintf(stderr, "a=%d b=%d c=%d\n", a, b, c);
108 
109  return NONE_VAL();
110 }
111 
112 KRK_Function(parseints) {
113  unsigned char a;
114  unsigned int b;
115  ssize_t c;
116  if (!krk_parseArgs("bIn",(const char*[]){"a","b","c"}, &a, &b, &c)) return NONE_VAL();
117 
118  fprintf(stderr, "%d %u %zd\n", a, b, c);
119  return NONE_VAL();
120 }
121 
122 KRK_Function(parsefloats) {
123  float f;
124  double d;
125 
126  if (!krk_parseArgs("fd",(const char*[]){"f","d"}, &f, &d)) return NONE_VAL();
127 
128  fprintf(stderr, "%f %f\n", f, d);
129  return NONE_VAL();
130 }
131 
132 int main(int argc, char * argv[]) {
133  krk_initVM(0);
134  krk_startModule("__main__");
135  BIND_FUNC(krk_currentThread.module, demofunc1);
136  BIND_FUNC(krk_currentThread.module, demofunc2);
137  BIND_FUNC(krk_currentThread.module, demofunc3);
138  BIND_FUNC(krk_currentThread.module, demofunc4);
139  BIND_FUNC(krk_currentThread.module, takeschars);
140  BIND_FUNC(krk_currentThread.module, parseints);
141  BIND_FUNC(krk_currentThread.module, parsefloats);
142  runSimpleRepl();
143  krk_freeVM();
144  return 0;
145 }
KrkValue krk_runtimeError(KrkClass *type, const char *fmt,...)
Produce and raise an exception with a formatted message.
Definition: exceptions.c:460
KrkInstance * module
Definition: vm.h:163
void krk_freeVM(void)
Release resources from the VM.
Definition: vm.c:953
void krk_initVM(int flags)
Initialize the VM at program startup.
Definition: vm.c:868
Stack reference or primative value.
Utilities for creating native bindings.
#define krk_parseArgs(f, n,...)
Parse arguments to a function while accepting keyword arguments.
Definition: util.h:360
Core API for the bytecode virtual machine.
krk_threadLocal KrkThreadState krk_currentThread
Thread-local VM state.
#define vm
Convenience macro for namespacing.
Definition: vm.h:257
KrkInstance * krk_startModule(const char *name)
Set up a new module object in the current thread.
Definition: vm.c:3209