コミットを比較

...

65 コミット

作成者 SHA1 メッセージ 日付
  Theo Souchon c8897c4d3d Update ccmeta.leg 2年前
  Theo Souchon 30c5591bd6 tests dir 2年前
  Theo Souchon 6bd07a5d43 Update README.md 2年前
  Theo Souchon d5db1215d2 Update README.md 2年前
  Theo Souchon b5bf7d7d01 reorganisation 2年前
  Theo Souchon d1b31824f0 Change the parsimony library (1 TODO remaining) 2年前
  Theo Souchon b7501812c5 delete c file 2年前
  Theo Souchon 4af35d8b89 update parsimony library 2年前
  Theo Souchon bbfc2b5a03 test fix + add rules number 2年前
  Theo Souchon 4d4861a1a4 rm .out 2年前
  Theo Souchon 80a0bd9ea1 fix parsefrom 2年前
  Theo Souchon 2fdc3233dd Add comments to some functions and parsefrom fix (hack one) 2年前
  Theo Souchon aad9a759c6 Fix stack files 2年前
  Theo Souchon 5eb974e1ec Fixing println and other stuff 2年前
  Theo Souchon ab5b82a477 add ParseFrom test 2年前
  Theo Souchon 14d9f8fde5 Rearranging the repository, and improving the readme 2年前
  Theo Souchon 38b6693d23 Changing the readme 2年前
  Theo Souchon 28c32ae2db Update dynamicObject.mc 2年前
  Theo Souchon 6d0c45316d rm useless string() 2年前
  Theo Souchon 39dda7f39e Simplification of dynamicObject.mc 2年前
  Theo Souchon 0df1d03e90 Switch between C & Parsimony fix 2年前
  Theo Souchon 3693a7364f new test file and some advances in realObject 2年前
  Theo Souchon ad46f3fe61 Some corrections and comments 2年前
  Theo Souchon b4dbb6575c update on the automatic creation of an object 2年前
  Theo Souchon 3a5c167051 Fix code 2年前
  Theo Souchon 56474a8c61 Fixed some bugs and added comments 2年前
  Theo Souchon d204b3216d fake-static-classes fixed 2年前
  Theo Souchon d984397ce8 Simplification + functions without parenthesis 2年前
  Theo Souchon 881fe633e6 delete useless file 2年前
  Theo Souchon fa73f35010 full example for object 2年前
  Theo Souchon 1a6c7636b7 add object generator 2年前
  Theo Souchon 791119d516 modification for the class object 2年前
  Theo Souchon cc35616769 Simplification 2年前
  Theo Souchon 58b9f93c2c fix test program 2年前
  Theo Souchon df3cf0bb80 First working prototype for class creation 2年前
  Theo Souchon c95443c520 new example of simplification 2年前
  Sebeck10 0869f79f74 rm block in mvalue 2年前
  Sebeck10 30af3df993 re indenting the file 2年前
  Sebeck10 d63cda4774 Fix problem on C_stringLiteral for test 001 2年前
  Sebeck10 219ab49a7e Update map.c 2年前
  Sebeck10 137b55bfa0 Fix list creation in stmts 2年前
  Sebeck10 f4c6b57449 Fix file disposition 2年前
  Sebeck10 d09512529b Add boot file with usefull functions 2年前
  Sebeck10 eccdff7877 re-indentation of the file on the new rules 2年前
  Sebeck10 945cf11555 adds functions: map, guardmap, select, reject 2年前
  Sebeck10 699aeb00e1 Add beginning of select/reject 2年前
  Sebeck10 8ac6023ee0 Update map.c 2年前
  Sebeck10 2f4756a72c Fix map function/simplification of the language 2年前
  Sebeck10 985453defb add map function 2年前
  Sebeck10 98e97dfc4e simplification of the language 2年前
  Sebeck10 58ca592c31 Fix little problem on a rule 2年前
  Sebeck10 8532be1d4f append part almost done & beginning of map function 2年前
  Theo Souchon 99ed98b99a Fix the meta_block error 2年前
  Theo Souchon 5771673d02 Correct problem of return on 001.c test of parsimony folder 2年前
  Theo Souchon 55869205aa Added the ability to return more things in one language exchange 2年前
  Theo Souchon df08508ca5 variable "lang" removed from file and comments updated to avoid conflicts 2年前
  Theo Souchon 951b8078d6 remove test lang 2年前
  Theo Souchon 14b31fe6f0 Added some test files 2年前
  Theo Souchon 950d511a1a Total independence of parsimony 2年前
  Theo Souchon 1f09f074a1 Added constant, initializer and statement processing. 2年前
  Theo Souchon 5e24fc3153 Adding a rule to the file and correcting the meta2c example 2年前
  Theo Souchon b629909c78 Modification of the README.md 2年前
  Theo Souchon 621a7863cb Added some test files 2年前
  Theo Souchon e0d3e12df6 Reorganising and adding rules to the file 2年前
  Theo Souchon 58df8abff6 Adding flags for HOMEBREW and update of the gitignore 2年前
354個のファイルの変更3074行の追加1039行の削除
分割表示
  1. +7
    -0
      .gitignore
  2. +5
    -0
      AUTHORS
  3. +0
    -3
      README.md
  4. +1
    -0
      README.md
  5. +96
    -0
      doc/README.md
  6. バイナリ
      doc/ccmeta.drawio.png
  7. +3
    -0
      examples/projectExample
  8. +19
    -0
      examples/projectExample.c
  9. +149
    -0
      examples/realObjectED
  10. +34
    -0
      examples/realObjectED.c
  11. +149
    -0
      examples/realObjectPF
  12. +34
    -0
      examples/realObjectPF.c
  13. +4
    -2
      src/Makefile
  14. +0
    -0
      src/buffer.h
  15. +0
    -0
      src/ccmeta-input.txt
  16. +1381
    -1029
      src/ccmeta.leg
  17. +0
    -0
      src/debug.c
  18. +12
    -0
      src/object.c
  19. +179
    -0
      src/parsimonyLibrary/boot.mc
  20. +134
    -0
      src/parsimonyLibrary/dynamicObject.c
  21. +233
    -0
      src/parsimonyLibrary/dynamicObjectExtDecl.mc
  22. +221
    -0
      src/parsimonyLibrary/dynamicObjectParsFrom.mc
  23. +118
    -0
      src/protoNumber.txt
  24. +0
    -0
      src/scope.c
  25. +0
    -0
      tests/c/00001.c
  26. +0
    -0
      tests/c/00002.c
  27. +0
    -0
      tests/c/00003.c
  28. +0
    -0
      tests/c/00004.c
  29. +0
    -0
      tests/c/00005.c
  30. +0
    -0
      tests/c/00006.c
  31. +0
    -0
      tests/c/00007.c
  32. +0
    -0
      tests/c/00008.c
  33. +0
    -0
      tests/c/00009.c
  34. +0
    -0
      tests/c/00010.c
  35. +0
    -0
      tests/c/00011.c
  36. +0
    -0
      tests/c/00012.c
  37. +0
    -0
      tests/c/00013.c
  38. +0
    -0
      tests/c/00014.c
  39. +0
    -0
      tests/c/00015.c
  40. +0
    -0
      tests/c/00016.c
  41. +0
    -0
      tests/c/00017.c
  42. +0
    -0
      tests/c/00018.c
  43. +0
    -0
      tests/c/00019.c
  44. +0
    -0
      tests/c/00020.c
  45. +0
    -0
      tests/c/00021.c
  46. +0
    -0
      tests/c/00022.c
  47. +0
    -0
      tests/c/00023.c
  48. +0
    -0
      tests/c/00024.c
  49. +0
    -0
      tests/c/00025.c
  50. +0
    -0
      tests/c/00026.c
  51. +0
    -0
      tests/c/00027.c
  52. +0
    -0
      tests/c/00028.c
  53. +0
    -0
      tests/c/00029.c
  54. +0
    -0
      tests/c/00030.c
  55. +0
    -0
      tests/c/00031.c
  56. +0
    -0
      tests/c/00032.c
  57. +0
    -0
      tests/c/00033.c
  58. +0
    -0
      tests/c/00034.c
  59. +0
    -0
      tests/c/00035.c
  60. +0
    -0
      tests/c/00036.c
  61. +0
    -0
      tests/c/00037.c
  62. +0
    -0
      tests/c/00038.c
  63. +0
    -0
      tests/c/00039.c
  64. +0
    -0
      tests/c/00040.c
  65. +0
    -0
      tests/c/00041.c
  66. +0
    -0
      tests/c/00042.c
  67. +0
    -0
      tests/c/00043.c
  68. +0
    -0
      tests/c/00044.c
  69. +0
    -0
      tests/c/00045.c
  70. +0
    -0
      tests/c/00046.c
  71. +0
    -0
      tests/c/00047.c
  72. +0
    -0
      tests/c/00048.c
  73. +0
    -0
      tests/c/00049.c
  74. +0
    -0
      tests/c/00050.c
  75. +0
    -0
      tests/c/00051.c
  76. +0
    -0
      tests/c/00052.c
  77. +0
    -0
      tests/c/00053.c
  78. +0
    -0
      tests/c/00054.c
  79. +0
    -0
      tests/c/00055.c
  80. +0
    -0
      tests/c/00056.c
  81. +0
    -0
      tests/c/00057.c
  82. +0
    -0
      tests/c/00058.c
  83. +0
    -0
      tests/c/00059.c
  84. +0
    -0
      tests/c/00060.c
  85. +0
    -0
      tests/c/00061.c
  86. +0
    -0
      tests/c/00064.c
  87. +0
    -0
      tests/c/00065.c
  88. +0
    -0
      tests/c/00072.c
  89. +0
    -0
      tests/c/00073.c
  90. +0
    -0
      tests/c/00075.c
  91. +0
    -0
      tests/c/00076.c
  92. +0
    -0
      tests/c/00077.c
  93. +0
    -0
      tests/c/00078.c
  94. +0
    -0
      tests/c/00079.c
  95. +0
    -0
      tests/c/00080.c
  96. +0
    -0
      tests/c/00081.c
  97. +0
    -0
      tests/c/00082.c
  98. +0
    -0
      tests/c/00083.c
  99. +0
    -0
      tests/c/00084.c
  100. +0
    -0
      tests/c/00085.c

+ 7
- 0
.gitignore ファイルの表示

@ -4,3 +4,10 @@
tests-c/*.otags
tests-c/*.tags
tests-c/*.expected
*.out
*tmp*
ccmeta
ccmeta.c
.vscode/

+ 5
- 0
AUTHORS ファイルの表示

@ -11,3 +11,8 @@ Mahe Tardy (2020)
Nathan Razafimanantsoa, Kumar Mahadayya (2021)
C AST
Theo Souchon (2022-2023)
metalanguage features, development, tests, examples
grammar, object system changes for metalanguage
source and repository reorganisation

+ 0
- 3
README.md ファイルの表示

@ -1,3 +0,0 @@
# ccmeta
C compiler with embedded metalanguage.

+ 1
- 0
README.md ファイルの表示

@ -0,0 +1 @@
doc/README.md

+ 96
- 0
doc/README.md ファイルの表示

@ -0,0 +1,96 @@
# CCMETA
C compiler with embedded metalanguage.
## <div id="toc">Table of contents<div>
1. [Architecture](#ar)
2. [Build the project](#bp)
- [Requirements](#ar)
- [Makefile](#makefile)
- [Build](#makefile_Build)
- [Clean](#makefile_Clean)
- [Test](#makefile_Test)
3. [Usage](#usage)
4. [Help](#help)
- [Peg/Leg](#pegleg)
5. [Authors](#authors)
## <div id="ar">Architecture<div>
![alt text](doc/ccmeta.drawio.png)
### [Go to the table of contents](#toc)
## <div id="bp">Build the project<div>
### <div id="req">Requirements<div>
Please install [peg/leg](https://www.piumarta.com/software/peg/) manually or with a package manager, for example with Homebrew:
```bash
$ brew install peg
```
Please install [the Boehm-Demers-Weiser conservative garbage collector](https://www.hboehm.info/gc/) manually or with a package manager, for example with Homebrew:
```bash
$ brew install bdw-gc
```
### <div id="makefile"> Makefile<div>
>Compatible with the homebrew installed on the apple silicon ship
#### <div id="makefile_Build">Build<div>
```bash
$ make
```
#### <div id="makefile_Clean">Clean<div>
```bash
$ make clean
```
#### <div id="makefile_Test">Test <div>
```bash
$ make test
```
### [Go to the table of contents](#toc)
## <div id="usage">Usage<div>
### How it works
You can pass your program:
* via an input file
```bash
$ ./ccmeta < file
```
* via a file
```bash
$ ./ccmeta file
```
### **Check each test file to get an idea of how parsimony works**
### [Go to the table of contents](#toc)
## <div id="help">Help<div>
### <div id="pegleg">peg/leg<div>
``` shell
$ man peg
```
### [Go to the table of contents](#toc)
## <div id="authors">Authors<div>
#### Ian Piumarta (2016-)
- infrastructure
- parsing framework
- C grammar, C AST
- object system design and implementation
- metalanguage design and implementation
#### Mahe Tardy (2020)
- object system implementation
- metalanguage implementation
#### Nathan Razafimanantsoa, Kumar Mahadayya (2021)
- C AST
#### Theo Souchon (2022-2023)
- metalanguage features, development, tests, examples
- grammar, object system changes for metalanguage
- source and repository reorganisation

バイナリ
doc/ccmeta.drawio.png ファイルの表示

変更前 変更後
幅: 692  |  高さ: 293  |  サイズ: 14 KiB 幅: 692  |  高さ: 293  |  サイズ: 14 KiB

+ 3
- 0
examples/projectExample ファイルの表示

@ -0,0 +1,3 @@
enum foo { Closed = 0, ReadOnly = 1, WriteOnly = 2 };
static char *stateNames[] = { "Closed", "ReadOnly", "WriteOnly"};

+ 19
- 0
examples/projectExample.c ファイルの表示

@ -0,0 +1,19 @@
@{
mapast(f, seq)
{
out = {};
for (i in seq) {
e = seq[i];
out[length(out)] = e.__proto__ != Token ? f(e) : e ;
}
out;
}
idToString(x) { { __proto__: C_string, value: "\"" + string(x.name.identifier) + "\"" } }
nil;
}
enum foo { Closed = 0, ReadOnly = 1, WriteOnly = 2 };
static char *stateNames[] = { @(mapast(idToString, program.last.enumList)) };

+ 149
- 0
examples/realObjectED ファイルの表示

@ -0,0 +1,149 @@
// This example serves to illustrate the possibility
// of adding the object aspect to C
// using the everyExternalDeclaration function.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Symbol {
char *name;
int class, selector;
};
struct Symbol *newSymbol(char *name)
{
struct Symbol *symbol = malloc(sizeof(*symbol));
symbol->name = strdup(name);
symbol->class = 0;
symbol->selector = 0;
return symbol;
}
struct Symbol **symbols = 0;
int nSymbols = 0;
struct Symbol *intern(char *name)
{
int lo = 0;
int hi = nSymbols - 1;
while (lo <= hi ) {
int mid = (lo+hi)/2;
int cmp = strcmp(name, symbols[mid]->name);
if (cmp > 0) lo = mid + 1;
else if (cmp < 0) hi = mid - 1;
else return symbols[mid];
}
symbols = realloc(symbols, sizeof(*symbols) * ++nSymbols);
memmove(symbols + lo + 1, symbols + lo, sizeof(*symbols)*(nSymbols - lo - 1));
return symbols[lo] = newSymbol(name);
}
typedef void *(*method_t)();
void *method_dnu()
{
printf("method not found\n");
exit(1);
return 0;
}
method_t **methods = 0;
int nClasses = 0;
int nSelectors = 0;
int ensureClass(struct Symbol *symbol)
{
if (symbol->class == 0) {
if (nClasses == 0) nClasses++;
symbol->class = nClasses++;
methods = realloc(methods, sizeof(*methods)*nClasses);
methods[symbol->class] = malloc(sizeof(*methods)*nSelectors);
for (int i = 0; i<nSelectors; ++i)
methods[symbol->class][i] = method_dnu;
}
return symbol->class;
}
int ensureSelector(struct Symbol *symbol)
{
if (symbol->selector == 0) {
if (nSelectors == 0) nSelectors++;
symbol->selector = nSelectors++;
for (int i = 0; i<nClasses; ++i) {
methods[i] = realloc(methods[i], sizeof(**methods)*nSelectors);
methods[i][nSelectors-1] = method_dnu;
}
}
return symbol->selector;
}
int findClass(char *class)
{
return ensureClass(intern(class));
}
int findSelector(char *selector)
{
return ensureSelector(intern(selector));
}
void addMethod(int class, int selector, method_t method)
{
methods[class][selector] = method;
}
#define lookup(C, S) (methods[C][S])
struct Object {
int class;
};
#define send(R, M, ...) ({ struct Object *__ = (struct Object *)(R); lookup(__->class, _selector_##M)(__, ##__VA_ARGS__); })
struct __oop { int class; };
typedef struct __oop *oop;
#include <math.h>
struct Point { int class; double x, y; };
oop newPoint(double x, double y)
{
struct Point *self = calloc(1, sizeof *self);
self->x = x;
self->y = y;
self->class = findClass("Point");
return (struct __oop *) self;
}
double Point_magnitude(struct __oop *__self)
{
struct Point *self = (struct Point *) __self;
printf("point method : %f\n", sqrt(self->x * self->x * self->y * self->y));
return sqrt(self->x * self->x * self->y * self->y);
}
double Point_getX(struct __oop *__self)
{
struct Point *self = (struct Point *) __self;
printf("point method : %f\n", self->x);
return self->x;
}
int main()
{
int _selector_getX= findSelector("getX");
int _selector_magnitude= findSelector("magnitude");
int _class_Point= findClass("Point");
addMethod(_class_Point, _selector_getX, (method_t) Point_getX);
addMethod(_class_Point, _selector_magnitude, (method_t) Point_magnitude);
oop p = newPoint(3, 4);
send(p, magnitude);
send(p, getX);
return 0;
}

+ 34
- 0
examples/realObjectED.c ファイルの表示

@ -0,0 +1,34 @@
@import("parsimonyLibrary/dynamicObjectExtDecl.mc")
#include <math.h>
@class struct Point { double x, y; };
@constructor("Point") oop newPoint(double x, double y)
{
self->x = x;
self->y = y;
}
@method("Point") double magnitude()
{
printf("point method : %f\n", sqrt(self->x * self->x * self->y * self->y));
return sqrt(self->x * self->x * self->y * self->y);
}
@method("Point") double getX()
{
printf("point method : %f\n", self->x);
return self->x;
}
int main()
{
oop p = newPoint(3, 4);
@send("p", "magnitude");
@send("p", "getX");
return 0;
}

+ 149
- 0
examples/realObjectPF ファイルの表示

@ -0,0 +1,149 @@
// This example serves to illustrate the possibility
// of adding the object aspect to C
// using the parseFrom primitive.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Symbol {
char *name;
int class, selector;
};
struct Symbol *newSymbol(char *name)
{
struct Symbol *symbol = malloc(sizeof(*symbol));
symbol->name = strdup(name);
symbol->class = 0;
symbol->selector = 0;
return symbol;
}
struct Symbol **symbols = 0;
int nSymbols = 0;
struct Symbol *intern(char *name)
{
int lo = 0;
int hi = nSymbols - 1;
while (lo <= hi ) {
int mid = (lo+hi)/2;
int cmp = strcmp(name, symbols[mid]->name);
if (cmp > 0) lo = mid + 1;
else if (cmp < 0) hi = mid - 1;
else return symbols[mid];
}
symbols = realloc(symbols, sizeof(*symbols) * ++nSymbols);
memmove(symbols + lo + 1, symbols + lo, sizeof(*symbols)*(nSymbols - lo - 1));
return symbols[lo] = newSymbol(name);
}
typedef void *(*method_t)();
void *method_dnu()
{
printf("method not found\n");
exit(1);
return 0;
}
method_t **methods = 0;
int nClasses = 0;
int nSelectors = 0;
int ensureClass(struct Symbol *symbol)
{
if (symbol->class == 0) {
if (nClasses == 0) nClasses++;
symbol->class = nClasses++;
methods = realloc(methods, sizeof(*methods)*nClasses);
methods[symbol->class] = malloc(sizeof(*methods)*nSelectors);
for (int i = 0; i<nSelectors; ++i)
methods[symbol->class][i] = method_dnu;
}
return symbol->class;
}
int ensureSelector(struct Symbol *symbol)
{
if (symbol->selector == 0) {
if (nSelectors == 0) nSelectors++;
symbol->selector = nSelectors++;
for (int i = 0; i<nClasses; ++i) {
methods[i] = realloc(methods[i], sizeof(**methods)*nSelectors);
methods[i][nSelectors-1] = method_dnu;
}
}
return symbol->selector;
}
int findClass(char *class)
{
return ensureClass(intern(class));
}
int findSelector(char *selector)
{
return ensureSelector(intern(selector));
}
void addMethod(int class, int selector, method_t method)
{
methods[class][selector] = method;
}
#define lookup(C, S) (methods[C][S])
struct Object {
int class;
};
#define send(R, M, ...) ({ struct Object *__ = (struct Object *)(R); lookup(__->class, _selector_##M)(__, ##__VA_ARGS__); })
struct __oop { int class; };
typedef struct __oop *oop;
#include <math.h>
struct Point { int class; double x, y; };
oop newPoint(double x, double y)
{
struct Point *self = calloc(1, sizeof *self);
self->x = x;
self->y = y;
self->class = findClass("Point");
return (struct __oop *) self;
}
double Point_magnitude(struct __oop *__self)
{
struct Point *self = (struct Point *) __self;
printf("point method : %f\n", sqrt(self->x * self->x * self->y * self->y));
return sqrt(self->x * self->x * self->y * self->y);
}
double Point_getX(struct __oop *__self)
{
struct Point *self = (struct Point *) __self;
printf("point method : %f\n", self->x);
return self->x;
}
int main()
{
int _selector_getX= findSelector("getX");
int _selector_magnitude= findSelector("magnitude");
int _class_Point= findClass("Point");
addMethod(_class_Point, _selector_getX, (method_t) Point_getX);
addMethod(_class_Point, _selector_magnitude, (method_t) Point_magnitude);
oop p = newPoint(3, 4);
// @send p magnitude();
// @send p getX();
return 0;
}

+ 34
- 0
examples/realObjectPF.c ファイルの表示

@ -0,0 +1,34 @@
@import("parsimonyLibrary/dynamicObjectParsFrom.mc")
#include <math.h>
@class struct Point { double x, y; };
@constructor Point oop newPoint(double x, double y)
{
self->x = x;
self->y = y;
}
@method Point double magnitude()
{
printf("point method : %f\n", sqrt(self->x * self->x * self->y * self->y));
return sqrt(self->x * self->x * self->y * self->y);
}
@method Point double getX()
{
printf("point method : %f\n", self->x);
return self->x;
}
int main()
{
oop p = newPoint(3, 4);
// @send p magnitude();
// @send p getX();
return 0;
}

Makefile → src/Makefile ファイルの表示

@ -1,5 +1,5 @@
CFLAGS = -I/opt/local/include -std=gnu99 -Wall -Wno-unused-label -Wno-unused-function -g
LDLIBS = -L/opt/local/lib -lgc -lm
CFLAGS = -I/opt/local/include -I/opt/homebrew/include -std=gnu99 -Wall -Wno-unused-label -Wno-unused-function -g
LDLIBS = -L/opt/local/lib -L/opt/homebrew/lib -lgc -lm
TREE = -t
MAIN = ccmeta
@ -39,6 +39,8 @@ $(MAIN) : $(MAIN).c object.c buffer.h
clean : .FORCE
rm -f $(MAIN) $(MAIN).c
rm -f *~ $(MAIN)-output.out
rm -rf */*.out
rm -rf ccmeta.dSYM
tidy : .FORCE
rm -f *~ $(MAIN)-tree.out

buffer.h → src/buffer.h ファイルの表示


ccmeta-input.txt → src/ccmeta-input.txt ファイルの表示


src/ccmeta.leg
ファイル差分が大きすぎるため省略します
ファイルの表示


debug.c → src/debug.c ファイルの表示


object.c → src/object.c ファイルの表示

@ -89,6 +89,7 @@ struct Undefined {
type_t type;
};
struct Integer {
type_t type;
int_t _value;
@ -427,6 +428,8 @@ int oopcmp(oop a, oop b)
}
case String:
return strcmp(get(a, String, value), get(b, String, value));
case Symbol:
return strcmp(get(a, Symbol, name), get(b, Symbol, name));
default: {
intptr_t l= (intptr_t)a, r= (intptr_t)b;
if (l < r) return -1;
@ -545,6 +548,15 @@ oop map_append(oop map, oop value)
return map_set(map, makeInteger(map_size(map)), value);
}
oop map_pop(oop map)
{ assert(map_isArray(map));
size_t size = get(map, Map, size);
if (size == 0) return null;
oop val = get(map, Map, elements)[--size].value;
set(map, Map, size, size);
return val;
}
oop makeArrayFromElement(oop elem, int repeat)
{
oop array= makeMapCapacity(repeat);

+ 179
- 0
src/parsimonyLibrary/boot.mc ファイルの表示

@ -0,0 +1,179 @@
@{
// create the function println
println(){
apply(print, __arguments__);
print("\n");
__arguments__;
}
__requires__ = {};
// Import the file
require(__fileName__)
{
if (__requires__[__fileName__] != null)
{
return __requires__[__fileName__]
}
import(__fileName__);
__requires__[__fileName__] = scope();
return scope();
}
// Get the current time in milliseconds
millis()
{
microseconds() / 1000;
}
// Get the last element of s
last(s)
{
s[length(s) - 1];
}
// adding the element e at the end of the list l
append(s, e)
{
s[length(s)] = e;
}
// adding the element e at the end of the list l
push(s, e)
{
append(s, e);
}
// remove the last element of the list s or remove the element e if not null
pop(s, e)
{
if (e == null)
{
e = length(s) - 1
}
ret = s[e];
t = {};
for (i in s)
{
if (i == e)
continue;
append(t, s[i]);
}
s = t;
ret;
}
// add or don't change an element in a dictionnary
intern(s, e)
{
lo = 0;
hi = length(s) - 1;
while (lo <= hi)
{
mid = (lo + hi) / 2;
if (e > s[mid])
lo = mid + 1;
else if (e < s[mid])
hi = mid - 1;
else
return e;
}
for (i = length(s); i > lo; i = i - 1)
{
s[i] = s[i - 1];
}
return s[lo] = e;
}
// merge the two list s1 and s2
fusion(s1, s2)
{
for (i in s2)
{
append(s1, s2[i]);
}
return s1;
}
// If g then we add a filter on the application of the function f to each element of seq
map(f, seq, g)
{
out = {};
if (!g) g = (){ 1 };
for (i in seq) {
e = seq[i];
out[length(out)] = g(e) ? f(e) : e ;
}
out;
}
notToken(x){x.__proto__ != Token}
// Select element e of s if the the result of the application of f on e is true
select(f, s)
{
out = {};
for (i in s)
{
e = s[i];
if (f(e))
{
append(out, e);
}
}
out;
}
// Select element e of s if the the result of the application of f on e is false
reject(f, s)
{
out = {};
for (i in s)
{
e = s[i];
if (!f(e))
{
append(out, e);
}
}
out;
}
//------------ C structure ------------//
newId(x, comm)
{
if (comm == null)
{
{identifier : x, __proto__ : C_id};
}
else
{
{identifier : x, comment : {text : comm, __proto__ : Comment}, __proto__ : C_id};
}
}
newText(x) { {value : x, __proto__ : C_string}; }
newComment(com) { {text : com, __proto__ : Comment}; }
newToken(txt, com)
{
if (com == null) return {text : txt, comment : newComment(""), __proto__ : Token};
{text : txt, comment : newComment(com), __proto__ : Token};
}
newSemicolon(com){newToken(";", com)}
newComma() { newToken(",", " "); }
newStar(com) { newToken("*", com); }
newBinary(com) { newToken("=", com); }
newEnum(x) { {attributeL : null, expression : null, name : newId(x), __proto__ : C_enum}; }
//-------------------- end ---------------------//
nil;
}

+ 134
- 0
src/parsimonyLibrary/dynamicObject.c ファイルの表示

@ -0,0 +1,134 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Symbol {
char *name;
int class, selector;
};
struct Symbol *newSymbol(char *name)
{
struct Symbol *symbol = malloc(sizeof(*symbol));
symbol->name = strdup(name);
symbol->class = 0;
symbol->selector = 0;
return symbol;
}
struct Symbol **symbols = 0;
int nSymbols = 0;
struct Symbol *intern(char *name)
{
int lo = 0;
int hi = nSymbols - 1;
while (lo <= hi ) {
int mid = (lo+hi)/2;
int cmp = strcmp(name, symbols[mid]->name);
if (cmp > 0) lo = mid + 1;
else if (cmp < 0) hi = mid - 1;
else return symbols[mid];
}
symbols = realloc(symbols, sizeof(*symbols) * ++nSymbols);
memmove(symbols + lo + 1, symbols + lo, sizeof(*symbols)*(nSymbols - lo - 1));
return symbols[lo] = newSymbol(name);
}
typedef void *(*method_t)();
void *method_dnu()
{
printf("method not found\n");
exit(1);
return 0;
}
method_t **methods = 0;
int nClasses = 0;
int nSelectors = 0;
int ensureClass(struct Symbol *symbol)
{
if (symbol->class == 0) {
if (nClasses == 0) nClasses++;
symbol->class = nClasses++;
methods = realloc(methods, sizeof(*methods)*nClasses);
methods[symbol->class] = malloc(sizeof(*methods)*nSelectors);
for (int i = 0; i<nSelectors; ++i)
methods[symbol->class][i] = method_dnu;
}
return symbol->class;
}
int ensureSelector(struct Symbol *symbol)
{
if (symbol->selector == 0) {
if (nSelectors == 0) nSelectors++;
symbol->selector = nSelectors++;
for (int i = 0; i<nClasses; ++i) {
methods[i] = realloc(methods[i], sizeof(**methods)*nSelectors);
methods[i][nSelectors-1] = method_dnu;
}
}
return symbol->selector;
}
int findClass(char *class)
{
return ensureClass(intern(class));
}
int findSelector(char *selector)
{
return ensureSelector(intern(selector));
}
void addMethod(int class, int selector, method_t method)
{
methods[class][selector] = method;
}
#define lookup(C, S) (methods[C][S])
struct Object {
int class;
};
void *Object_print()
{
printf("Object\n");
return 0;
}
struct Point {
int class;
double x, y;
};
void *Point_print(struct Point *self)
{
printf("Point(%f, %f)\n", self->x, self->y);
return 0;
}
#define send(R, M, ...) ({ struct Object *__ = (struct Object *)(R); lookup(__->class, _selector_##M)(__, ##__VA_ARGS__); })
int main()
{
int _selector_print = findSelector("print" );
int _class_object = findClass ("Object" );
int _class_point = findClass ("Point" );
addMethod(_class_object, _selector_print, Object_print);
struct Object *o = calloc(1, sizeof(*o));
o->class = _class_object;
send(o, print);
addMethod(_class_point, _selector_print, Point_print);
struct Point *p = calloc(1, sizeof(*p));
p->class = _class_point;
send(p, print);
return 0;
}

+ 233
- 0
src/parsimonyLibrary/dynamicObjectExtDecl.mc ファイルの表示

@ -0,0 +1,233 @@
// This example serves to illustrate the possibility
// of adding the object aspect to C
// using the everyExternalDeclaration function.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Symbol {
char *name;
int class, selector;
};
struct Symbol *newSymbol(char *name)
{
struct Symbol *symbol = malloc(sizeof(*symbol));
symbol->name = strdup(name);
symbol->class = 0;
symbol->selector = 0;
return symbol;
}
struct Symbol **symbols = 0;
int nSymbols = 0;
struct Symbol *intern(char *name)
{
int lo = 0;
int hi = nSymbols - 1;
while (lo <= hi ) {
int mid = (lo+hi)/2;
int cmp = strcmp(name, symbols[mid]->name);
if (cmp > 0) lo = mid + 1;
else if (cmp < 0) hi = mid - 1;
else return symbols[mid];
}
symbols = realloc(symbols, sizeof(*symbols) * ++nSymbols);
memmove(symbols + lo + 1, symbols + lo, sizeof(*symbols)*(nSymbols - lo - 1));
return symbols[lo] = newSymbol(name);
}
typedef void *(*method_t)();
void *method_dnu()
{
printf("method not found\n");
exit(1);
return 0;
}
method_t **methods = 0;
int nClasses = 0;
int nSelectors = 0;
int ensureClass(struct Symbol *symbol)
{
if (symbol->class == 0) {
if (nClasses == 0) nClasses++;
symbol->class = nClasses++;
methods = realloc(methods, sizeof(*methods)*nClasses);
methods[symbol->class] = malloc(sizeof(*methods)*nSelectors);
for (int i = 0; i<nSelectors; ++i)
methods[symbol->class][i] = method_dnu;
}
return symbol->class;
}
int ensureSelector(struct Symbol *symbol)
{
if (symbol->selector == 0) {
if (nSelectors == 0) nSelectors++;
symbol->selector = nSelectors++;
for (int i = 0; i<nClasses; ++i) {
methods[i] = realloc(methods[i], sizeof(**methods)*nSelectors);
methods[i][nSelectors-1] = method_dnu;
}
}
return symbol->selector;
}
int findClass(char *class)
{
return ensureClass(intern(class));
}
int findSelector(char *selector)
{
return ensureSelector(intern(selector));
}
void addMethod(int class, int selector, method_t method)
{
methods[class][selector] = method;
}
#define lookup(C, S) (methods[C][S])
struct Object {
int class;
};
#define send(R, M, ...) ({ struct Object *__ = (struct Object *)(R); lookup(__->class, _selector_##M)(__, ##__VA_ARGS__); })
struct __oop { int class; };
typedef struct __oop *oop;
@import("../src/parsimonyLibrary/boot.mc")
@{
rmSemi(x) {
x.semicolon = null;
x;
}
makeln(x, tabs, newLine) {
x.semicolon.comment = newComment("\n");
nbTabs = 0;
nbLn = 1;
if (tabs != null) { nbTabs = tabs; }
if (newLine != null) { nbLn = newLine; }
for (i = 1; i<nbLn; i++) {
x.semicolon.comment.text = x.semicolon.comment.text + "\n";
}
for (i = 0; i<tabs; i++) {
x.semicolon.comment.text = x.semicolon.comment.text + " ";
}
x;
}
program.objects = {};
program.objects.class = {};
program.objects.methods = {};
class()
{
program.objects.function = "class";
nil;
}
method(object_name)
{
program.objects.currentClassName = object_name;
program.objects.function = "method";
nil;
}
constructor(object_name) {
program.objects.currentClassName = object_name;
program.objects.function = "constructor";
nil;
}
send(object, method)
{
rmSemi(`declaration send(@@(newText(object)), @@(newText(method))););
}
everyExternalDeclaration(s)
{
/*********** Class function ************/
if (program.objects.function == "class") {
program.objects.class[program.last.name.identifier] = {};
for (i=length(program.last.declarationL); i>0; i--) {
program.last.declarationL[i] = program.last.declarationL[i-1];
};
program.last.declarationL[0] = `declaration int class; ;
program.objects.function = "none";
return s;
}
/*********** Method function ************/
if (program.objects.function == "method") {
intern(program.objects.methods, program.last.declarators.declarators.identifier);
for (i in program.objects.class) {
if (string(i) == program.objects.currentClassName) intern(program.objects.class[i], program.last.declarators.declarators.identifier);
}
program.last.declarators.declarators.identifier = program.objects.currentClassName + "_" + string(program.last.declarators.declarators.identifier);
param = rmSemi(`declaration struct __oop *__self;);
if (length(s.declarators.paramTypeL) > 0) {
append(s.declarators.paramTypeL, newComma());
append(s.declarators.paramTypeL, param);
} else {
s.declarators.paramTypeL = {};
s.declarators.paramTypeL[0] = param;
}
tmp = {};
tmp[0] = makeln(`declaration struct @@(newId(program.objects.currentClassName, " ")) *self = (struct @@(newId(program.objects.currentClassName, " ")) *) __self;, 1);
s.compoundS.expression = fusion(tmp, s.compoundS.expression);
program.objects.function = "none";
return s;
}
/*********** Constructor function ************/
if (program.objects.function == "constructor") {
rawDeclaration = makeln(`declaration class = findClass(@@(newText("\"" + program.objects.currentClassName + "\"")));, 1);
t = {};
append(t, makeln(`declaration struct @@(newId(program.objects.currentClassName, " ")) *self = calloc(1, sizeof *self);, 1));
// take the structure of self->foo
lhs = treeCopy(s.compoundS.expression[0].expression.lhs);
lhs.rhs = newId("class", " ");
// Change foo to Class
rawDeclaration.declarators[0].lhs = lhs;
// prepare the right object to return
append(s.compoundS.expression, rawDeclaration);
append(s.compoundS.expression, makeln(`statement return (struct __oop *) self;));
s.compoundS.expression = fusion(t, s.compoundS.expression);
program.objects.function = "none";
return s;
}
/*********** Main function ************/
if (s.declarators != null && s.declarators.declarators != null && string(s.declarators.declarators.identifier) == "main") {
t = {};
for(i in program.objects.methods) {
methodName = string(program.objects.methods[i]);
append(t, makeln(`declaration int @@(newId("_selector_" + methodName)) = findSelector(@@(newId("\"" + methodName + "\"")));, 1));
}
for (i in program.objects.class) {
className = string(i);
append(t, makeln(`declaration int @@(newId("_class_" + className)) = findClass(@@(newId("\"" + className + "\"")));, 1));
for (k in program.objects.class[i]) {
linkedMethod = string(program.objects.class[i][k]);
castMethod = "(method_t) " + className + "_" + linkedMethod;
append(t, makeln(`declaration addMethod(@@(newId("_class_" + className)), @@(newId("_selector_" + linkedMethod)), @@(newId(castMethod)));, 1));
}
}
s.compoundS.expression = fusion(t, s.compoundS.expression);
return s;
}
s;
}
nil;
}

+ 221
- 0
src/parsimonyLibrary/dynamicObjectParsFrom.mc ファイルの表示

@ -0,0 +1,221 @@
// This example serves to illustrate the possibility
// of adding the object aspect to C
// using the parseFrom primitive.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Symbol {
char *name;
int class, selector;
};
struct Symbol *newSymbol(char *name)
{
struct Symbol *symbol = malloc(sizeof(*symbol));
symbol->name = strdup(name);
symbol->class = 0;
symbol->selector = 0;
return symbol;
}
struct Symbol **symbols = 0;
int nSymbols = 0;
struct Symbol *intern(char *name)
{
int lo = 0;
int hi = nSymbols - 1;
while (lo <= hi ) {
int mid = (lo+hi)/2;
int cmp = strcmp(name, symbols[mid]->name);
if (cmp > 0) lo = mid + 1;
else if (cmp < 0) hi = mid - 1;
else return symbols[mid];
}
symbols = realloc(symbols, sizeof(*symbols) * ++nSymbols);
memmove(symbols + lo + 1, symbols + lo, sizeof(*symbols)*(nSymbols - lo - 1));
return symbols[lo] = newSymbol(name);
}
typedef void *(*method_t)();
void *method_dnu()
{
printf("method not found\n");
exit(1);
return 0;
}
method_t **methods = 0;
int nClasses = 0;
int nSelectors = 0;
int ensureClass(struct Symbol *symbol)
{
if (symbol->class == 0) {
if (nClasses == 0) nClasses++;
symbol->class = nClasses++;
methods = realloc(methods, sizeof(*methods)*nClasses);
methods[symbol->class] = malloc(sizeof(*methods)*nSelectors);
for (int i = 0; i<nSelectors; ++i)
methods[symbol->class][i] = method_dnu;
}
return symbol->class;
}
int ensureSelector(struct Symbol *symbol)
{
if (symbol->selector == 0) {
if (nSelectors == 0) nSelectors++;
symbol->selector = nSelectors++;
for (int i = 0; i<nClasses; ++i) {
methods[i] = realloc(methods[i], sizeof(**methods)*nSelectors);
methods[i][nSelectors-1] = method_dnu;
}
}
return symbol->selector;
}
int findClass(char *class)
{
return ensureClass(intern(class));
}
int findSelector(char *selector)
{
return ensureSelector(intern(selector));
}
void addMethod(int class, int selector, method_t method)
{
methods[class][selector] = method;
}
#define lookup(C, S) (methods[C][S])
struct Object {
int class;
};
#define send(R, M, ...) ({ struct Object *__ = (struct Object *)(R); lookup(__->class, _selector_##M)(__, ##__VA_ARGS__); })
struct __oop { int class; };
typedef struct __oop *oop;
@import("../src/parsimonyLibrary/boot.mc")
@{
rmSemi(x) {
x.semicolon = null;
x;
}
makeln(x, tabs, newLine) {
x.semicolon.comment = newComment("\n");
nbTabs = 0;
nbLn = 1;
if (tabs != null) { nbTabs = tabs; }
if (newLine != null) { nbLn = newLine; }
for (i = 1; i<nbLn; i++) {
x.semicolon.comment.text = x.semicolon.comment.text + "\n";
}
for (i = 0; i<tabs; i++) {
x.semicolon.comment.text = x.semicolon.comment.text + " ";
}
x;
}
program.objects = {};
program.objects.class = {};
program.objects.methods = {};
class()
{
exp = parseFrom("declaration");
program.objects.class[exp.specifiers[0].name.identifier] = {};
for (i=length(exp.specifiers[0].declarationL); i>0; i--) {
exp.specifiers[0].declarationL[i] = exp.specifiers[0].declarationL[i-1];
};
exp.specifiers[0].declarationL[0] = `declaration int class; ;
exp;
}
method()
{
id = string(parseFrom("id").identifier);
decl = parseFrom("func");
intern(program.objects.methods, decl.declarators.declarators.identifier);
for (i in program.objects.class) {
if (string(i) == id) intern(program.objects.class[i], decl.declarators.declarators.identifier);
}
decl.declarators.declarators.identifier = id + "_" + string(decl.declarators.declarators.identifier);
param = rmSemi(`declaration struct __oop *__self;);
if (length(decl.declarators.paramTypeL) > 0) {
append(decl.declarators.paramTypeL, newComma());
append(decl.declarators.paramTypeL, param);
} else {
decl.declarators.paramTypeL = {};
decl.declarators.paramTypeL[0] = param;
}
tmp = {};
tmp[0] = makeln(`declaration struct @@(newId(id, " ")) *self = (struct @@(newId(id, " ")) *) __self;, 1);
decl.compoundS.expression = fusion(tmp, decl.compoundS.expression);
program.objects.function = "none";
decl;
}
constructor() {
id = string(parseFrom("id").identifier);
decl = parseFrom("func");
rawDeclaration = makeln(`declaration class = findClass(@@(newText("\"" + id + "\"")));, 1);
t = {};
append(t, makeln(`declaration struct @@(newId(id, " ")) *self = calloc(1, sizeof *self);, 1));
// take the structure of self->foo
lhs = treeCopy(decl.compoundS.expression[0].expression.lhs);
lhs.rhs = newId("class", " ");
// Change foo to Class
rawDeclaration.declarators[0].lhs = lhs;
// prepare the right object to return
append(decl.compoundS.expression, rawDeclaration);
append(decl.compoundS.expression, makeln(`statement return (struct __oop *) self;));
decl.compoundS.expression = fusion(t, decl.compoundS.expression);
program.objects.function = "none";
decl;
}
// TODO
send()
{
nil;
}
everyExternalDeclaration(s)
{
/*********** Main function ************/
if (s.declarators != null && s.declarators.declarators != null && string(s.declarators.declarators.identifier) == "main") {
t = {};
for(i in program.objects.methods) {
methodName = string(program.objects.methods[i]);
append(t, makeln(`declaration int @@(newId("_selector_" + methodName)) = findSelector(@@(newId("\"" + methodName + "\"")));, 1));
}
for (i in program.objects.class) {
className = string(i);
append(t, makeln(`declaration int @@(newId("_class_" + className)) = findClass(@@(newId("\"" + className + "\"")));, 1));
for (k in program.objects.class[i]) {
linkedMethod = string(program.objects.class[i][k]);
castMethod = "(method_t) " + className + "_" + linkedMethod;
append(t, makeln(`declaration addMethod(@@(newId("_class_" + className)), @@(newId("_selector_" + linkedMethod)), @@(newId(castMethod)));, 1));
}
}
s.compoundS.expression = fusion(t, s.compoundS.expression);
return s;
}
s;
}
nil;
}

+ 118
- 0
src/protoNumber.txt ファイルの表示

@ -0,0 +1,118 @@
_DO(Undefined)
_DO(Integer)
_DO(Float)
_DO(String)
_DO(Symbol)
_DO(Function)
_DO(Map)
_DO(If)
_DO(While)
_DO(Do)
_DO(For)
_DO(ForIn)
_DO(Switch)
_DO(Call)
_DO(Invoke)
_DO(Func)
_DO(Block)
_DO(Declaration)
_DO(Assign)
_DO(Logor)
_DO(Logand)
_DO(Bitor)
_DO(Bitxor)
_DO(Bitand)
_DO(Equal)
_DO(Noteq)
_DO(Less)
_DO(Lesseq)
_DO(Greater)
_DO(Greatereq)
_DO(Shleft)
_DO(Shright)
_DO(Add)
_DO(Sub)
_DO(Mul)
_DO(Div)
_DO(Mod)
_DO(Not)
_DO(Neg)
_DO(Com)
_DO(PreIncVariable)
_DO(PreIncMember)
_DO(PreIncIndex)
_DO(PostIncVariable)
_DO(PostIncMember)
_DO(PostIncIndex)
_DO(PreDecVariable)
_DO(PreDecMember)
_DO(PreDecIndex)
_DO(PostDecVariable)
_DO(PostDecMember)
_DO(PostDecIndex)
_DO(GetVariable)
_DO(GetMember)
_DO(SetMember)
_DO(GetIndex)
_DO(SetIndex)
_DO(Return)
_DO(Break)
_DO(Continue)
_DO(Throw)
_DO(Try)
_DO(Quote)
_DO(Quasiquote)
_DO(Comment)
_DO(Token)
_DO(C_declaration)
_DO(C_string)
_DO(C_if)
_DO(C_int)
_DO(C_float)
_DO(C_char)
_DO(C_id)
_DO(C_while)
_DO(C_do)
_DO(C_for)
_DO(C_binary)
_DO(C_initializer)
_DO(C_range)
_DO(C_conditional)
_DO(C_index)
_DO(C_designation)
_DO(C_attribution)
_DO(C_deref)
_DO(C_block)
_DO(C_call)
_DO(C_subexpr)
_DO(C_array)
_DO(C_parameter)
_DO(C_typeOf)
_DO(C_unary)
_DO(C_prefix)
_DO(C_alignOf)
_DO(C_sizeOf)
_DO(C_cast)
_DO(C_attributeSpec)
_DO(C_asm)
_DO(C_asmExpr)
_DO(C_asmExprArg)
_DO(C_aggregate)
_DO(C_attribute)
_DO(C_postfix)
_DO(C_compound)
_DO(C_functionDef)
_DO(C_exprStatement)
_DO(C_switch)
_DO(C_goto)
_DO(C_continue)
_DO(C_break)
_DO(C_return)
_DO(C_case)
_DO(C_default)
_DO(C_label)
_DO(C_labelDeclaration)
_DO(C_structSpec)
_DO(C_structDeclarator)
_DO(C_enumSpec)
_DO(C_enum)

scope.c → src/scope.c ファイルの表示


tests-c/00001.c → tests/c/00001.c ファイルの表示


tests-c/00002.c → tests/c/00002.c ファイルの表示


tests-c/00003.c → tests/c/00003.c ファイルの表示


tests-c/00004.c → tests/c/00004.c ファイルの表示


tests-c/00005.c → tests/c/00005.c ファイルの表示


tests-c/00006.c → tests/c/00006.c ファイルの表示


tests-c/00007.c → tests/c/00007.c ファイルの表示


tests-c/00008.c → tests/c/00008.c ファイルの表示


tests-c/00009.c → tests/c/00009.c ファイルの表示


tests-c/00010.c → tests/c/00010.c ファイルの表示


tests-c/00011.c → tests/c/00011.c ファイルの表示


tests-c/00012.c → tests/c/00012.c ファイルの表示


tests-c/00013.c → tests/c/00013.c ファイルの表示


tests-c/00014.c → tests/c/00014.c ファイルの表示


tests-c/00015.c → tests/c/00015.c ファイルの表示


tests-c/00016.c → tests/c/00016.c ファイルの表示


tests-c/00017.c → tests/c/00017.c ファイルの表示


tests-c/00018.c → tests/c/00018.c ファイルの表示


tests-c/00019.c → tests/c/00019.c ファイルの表示


tests-c/00020.c → tests/c/00020.c ファイルの表示


tests-c/00021.c → tests/c/00021.c ファイルの表示


tests-c/00022.c → tests/c/00022.c ファイルの表示


tests-c/00023.c → tests/c/00023.c ファイルの表示


tests-c/00024.c → tests/c/00024.c ファイルの表示


tests-c/00025.c → tests/c/00025.c ファイルの表示


tests-c/00026.c → tests/c/00026.c ファイルの表示


tests-c/00027.c → tests/c/00027.c ファイルの表示


tests-c/00028.c → tests/c/00028.c ファイルの表示


tests-c/00029.c → tests/c/00029.c ファイルの表示


tests-c/00030.c → tests/c/00030.c ファイルの表示


tests-c/00031.c → tests/c/00031.c ファイルの表示


tests-c/00032.c → tests/c/00032.c ファイルの表示


tests-c/00033.c → tests/c/00033.c ファイルの表示


tests-c/00034.c → tests/c/00034.c ファイルの表示


tests-c/00035.c → tests/c/00035.c ファイルの表示


tests-c/00036.c → tests/c/00036.c ファイルの表示


tests-c/00037.c → tests/c/00037.c ファイルの表示


tests-c/00038.c → tests/c/00038.c ファイルの表示


tests-c/00039.c → tests/c/00039.c ファイルの表示


tests-c/00040.c → tests/c/00040.c ファイルの表示


tests-c/00041.c → tests/c/00041.c ファイルの表示


tests-c/00042.c → tests/c/00042.c ファイルの表示


tests-c/00043.c → tests/c/00043.c ファイルの表示


tests-c/00044.c → tests/c/00044.c ファイルの表示


tests-c/00045.c → tests/c/00045.c ファイルの表示


tests-c/00046.c → tests/c/00046.c ファイルの表示


tests-c/00047.c → tests/c/00047.c ファイルの表示


tests-c/00048.c → tests/c/00048.c ファイルの表示


tests-c/00049.c → tests/c/00049.c ファイルの表示


tests-c/00050.c → tests/c/00050.c ファイルの表示


tests-c/00051.c → tests/c/00051.c ファイルの表示


tests-c/00052.c → tests/c/00052.c ファイルの表示


tests-c/00053.c → tests/c/00053.c ファイルの表示


tests-c/00054.c → tests/c/00054.c ファイルの表示


tests-c/00055.c → tests/c/00055.c ファイルの表示


tests-c/00056.c → tests/c/00056.c ファイルの表示


tests-c/00057.c → tests/c/00057.c ファイルの表示


tests-c/00058.c → tests/c/00058.c ファイルの表示


tests-c/00059.c → tests/c/00059.c ファイルの表示


tests-c/00060.c → tests/c/00060.c ファイルの表示


tests-c/00061.c → tests/c/00061.c ファイルの表示


tests-c/00064.c → tests/c/00064.c ファイルの表示


tests-c/00065.c → tests/c/00065.c ファイルの表示


tests-c/00072.c → tests/c/00072.c ファイルの表示


tests-c/00073.c → tests/c/00073.c ファイルの表示


tests-c/00075.c → tests/c/00075.c ファイルの表示


tests-c/00076.c → tests/c/00076.c ファイルの表示


tests-c/00077.c → tests/c/00077.c ファイルの表示


tests-c/00078.c → tests/c/00078.c ファイルの表示


tests-c/00079.c → tests/c/00079.c ファイルの表示


tests-c/00080.c → tests/c/00080.c ファイルの表示


tests-c/00081.c → tests/c/00081.c ファイルの表示


tests-c/00082.c → tests/c/00082.c ファイルの表示


tests-c/00083.c → tests/c/00083.c ファイルの表示


tests-c/00084.c → tests/c/00084.c ファイルの表示


tests-c/00085.c → tests/c/00085.c ファイルの表示


変更されたファイルが多すぎるため、一部のファイルは表示されません

読み込み中…
キャンセル
保存