Последние сообщения

Страницы: [1] 2 3 ... 10
1
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от vlad Апрель 21, 2019, 08:32:57 pm »
Что Вы хотите поправить? Если добавить внятности ошибки, то можно, но вряд ли автор транслятора будет это делать. Если возможность использовать открытые массивы в записях, то нет - это не соответствует языку.

Да, над синтаксическими ошибками там серьезную работу надо делать, сходу не пофиксать. Поскольку грамматики опредяется в а-ля DSL, то парсер очень тупой и не может четко сказать, что ему не понравилось (только то, что вот этот конструкт не соответсвует грамматике).
2
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от vlad Апрель 21, 2019, 08:27:34 pm »
Подскажите, пожалуйста, на что ругается (знаю, что-то не так с методом push)

Такие штуки надо как баги сабмитать: https://github.com/vladfolts/oberonjs/issues/51
Посмотрю на досуге.
3
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от kkkk Март 31, 2019, 02:19:08 am »
Что Вы хотите поправить? Если добавить внятности ошибки, то можно, но вряд ли автор транслятора будет это делать. Если возможность использовать открытые массивы в записях, то нет - это не соответствует языку.
4
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от adva Март 23, 2019, 10:09:19 am »
Если указываю открытый массив в свойстве указателя на запись, то ошибка выводится не внятная:
MODULE error;
    IMPORT JS;

    TYPE

        Options* = POINTER TO RECORD
            cwd: ARRAY OF CHAR;
        END;

BEGIN
END error.

ошибка:
File "lib\error.ob", line 6: END expected (MODULE)
При указании размера, ошибок не выдает:

MODULE error;
    IMPORT JS;

    TYPE

        Options* = POINTER TO RECORD
            cwd: ARRAY 100 OF CHAR;
        END;

BEGIN
END error.

Это можно поправить?
5
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от adva Март 22, 2019, 06:27:49 am »
Вопрос снят, переделал на процедуры. Простейший пример расширения для vscode на обероне заработал, дальше думаю будет проще. В принципе нашел ранее вариант использовать 1с для написания таск для vscode (о котором тут вроде упоминали - onescript). До сих пор использовал именно task, но думаю расширениями некоторые вещи будут более удобными, чем задачами. Хотя попробую переделать уже имеющийся код, и станет понятно, как лучше (по скорости написать для таск на 1с для меня быстрее)
6
Общий раздел / Re: Online компилятор Oberon-07/11.
« Последний ответ от adva Март 20, 2019, 01:59:40 pm »
Подскажите, пожалуйста, на что ругается (знаю, что-то не так с методом push)

MODULE vscodeOber;

    IMPORT JS;

    TYPE
       
        AnyOb = RECORD END;
        Any* = POINTER TO AnyOb;
       
        Disposable* = POINTER TO RECORD (AnyOb)
            PROCEDURE push* (disposable: Disposable)
        END;

    VAR
   
    PROCEDURE Disposable.push* (disp: Disposable);
    BEGIN
    END Disposable.push;

BEGIN

END vscodeOber.

Ошибка:
TypeError: internal compiler error while parsing line 12:         END;
Cannot read property 'exported' of undefined
    at checkMethodExport (C:\git\adva\vsc_oberon\oberonjs\js\EberonContextType.js:85:29)
    at Record.handleMessage (C:\git\adva\vsc_oberon\oberonjs\js\EberonContextType.js:101:4)
    at FieldList.Node.handleMessage (C:\git\adva\vsc_oberon\oberonjs\js\ContextHierarchy.js:49:22)
    at MethodHeading.Node.handleMessage (C:\git\adva\vsc_oberon\oberonjs\js\ContextHierarchy.js:49:22)
    at MethodHeading.endParse (C:\git\adva\vsc_oberon\oberonjs\js\EberonContextType.js:184:19)
    at C:\git\adva\vsc_oberon\oberonjs\parser.js:101:19
    at C:\git\adva\vsc_oberon\oberonjs\parser.js:51:8
    at C:\git\adva\vsc_oberon\oberonjs\parser.js:98:8
    at C:\git\adva\vsc_oberon\oberonjs\parser.js:36:9
    at C:\git\adva\vsc_oberon\oberonjs\parser.js:36:9
The terminal process terminated with exit code: 1

7
Общий раздел / Re: Закат солнца вручную!
« Последний ответ от Jordan Февраль 22, 2019, 05:46:21 pm »
Пока был на уровне STL все шло нормально. Но мне захотелось посмотреть как оно всё под капотоп то работает.
8
Общий раздел / Re: Закат солнца вручную!
« Последний ответ от Jordan Февраль 22, 2019, 05:44:10 pm »
На гитхабе посмотрел реализацию msvcrt, как реализован malloc

void* malloc(size_t _size)
{
   return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _size);
}

В dllmain при загрузке данной либы

Цитировать
     hHeap = HeapCreate(0, 100000, 0);
        if (hHeap == NULL)
return FALSE;

Ну ладно думаю, сделаю аналогично.

Цитировать
#include <windows.h>

#define S1(x) #x
#define S2(x) S1(x)


#define _Assert(Expression, File, Line)                            \
do {                                                               \
if(!(Expression))                                              \
{                                                              \
MessageBox(0, S2(Line), "", 0);    \
ExitProcess(0);                                                  \
}                                                              \
} while(0)


#define Assert(X) _Assert(X, __FILE__, __LINE__)


#define NULL 0

class Memory
{
private:
  HANDLE Heap;
 
public:
Memory()
{
  Heap = NULL;

  Heap = HeapCreate(0, 100000, 0);

  Assert(Heap != NULL);
}

void * Allocate(unsigned int Size)
{
  void * p = NULL;

  p = HeapAlloc(Heap, HEAP_ZERO_MEMORY, Size);
 
  Assert(p != NULL);
 
  return p;
}

void Deallocate(void * Src)
{
  Assert(Src != NULL);
 
  HeapFree(Heap, 0, Src);
}

};

Memory GlobalMemoryAllocator;

void * operator new(unsigned int Size)
{
  void * p = GlobalMemoryAllocator.Allocate(Size);

  return p;
}


void operator delete(void * Src)
{
  GlobalMemoryAllocator.Deallocate(Src);
}




class Mem
{
public:
  int m_Data;
};

Mem idl;

void Main()
{

Mem * p = new Mem;

        p->m_Data = 5;

        if (p->m_Data > 10)
        {
        p->m_Data = 100;
        }
       
  MessageBox(0, "Hello!", "MsgBox", 0);
 
  //Console Out;

  //Out.Write("Hello World!");
 
  ExitProcess(0);
}

Все равно не работает. Ассерты не срабатывают.
9
Общий раздел / Re: Закат солнца вручную!
« Последний ответ от Jordan Февраль 22, 2019, 05:05:27 pm »
Нагуглил, сделал проверку оп ассерту, один фиг не работает.

Цитировать
#include <windows.h>

#define Assert(Expression)                                      \
do {                                                               \
if(!(Expression))                                              \
{                                                              \
MessageBox(0, "#Expression", "Assert", 0);                      \
ExitProcess(0);                                                  \
}                                                              \
} while(0)

#define NULL 0

class Memory
{
private:
  HANDLE Heap;

public:
Memory()
{
}

void * Allocate(unsigned int Size)
{
  void * p = NULL;

  p = VirtualAlloc(NULL, Size, MEM_RESERVE, PAGE_READWRITE);
 
  Assert(p != NULL);
 
  return p;
}

void Deallocate(void * Src)
{
  Assert(Src != NULL);
 
  VirtualFree(Src, 0, MEM_RELEASE);
}

~Memory()
{
  HeapDestroy(Heap);
}

};

Memory GMAllocator;

/*void * operator new(unsigned int Size)
{
  void * p = GMAllocator.Allocate(Size);

  return p;
}*/


/*void operator delete(void * Src)
{
  GMAllocator.Deallocate(Src);
}*/




class Mem
{
public:
  int m_Data;
};

Mem idl;

void Main()
{

Mem * p = (Mem*)GMAllocator.Allocate(sizeof(Mem));

        p->m_Data = 5;

        if (p->m_Data > 10)
        {
        p->m_Data = 100;
        }
       
  MessageBox(0, "Hello!", "MsgBox", 0);
 
  //Console Out;

  //Out.Write("Hello World!");
 
  ExitProcess(0);
}
10
Общий раздел / Закат солнца вручную!
« Последний ответ от Jordan Февраль 22, 2019, 03:24:33 pm »
Приветствую!

Решил написать минимальное приложение на winapi.

Стал реализовывать работу с памятью через winapi.

Программа падает.

Как компилю.(использую mingw)
"..\..\mingw\bin\g++" -omain -s -nostdlib -fno-rtti -fno-exceptions -fno-use-cxa-atexit -Wall -Wformat -Werror main.cpp -lkernel32 -luser32

сам исходник

#include <windows.h>

class Memory
{
private:
  HANDLE Heap;

public:
Memory()
{
  Heap = HeapCreate(0,0x01000,0);
}

void * Allocate(unsigned int Size)
{
  return HeapAlloc(Heap, 0, Size);
}

void Deallocate(void * Src)
{
  HeapFree(Heap, 0, Src);
}

~Memory()
{
  HeapDestroy(Heap);
}

};

static Memory GlobalMemoryAllocator;

void * operator new(unsigned int Size)
{
  return GlobalMemoryAllocator.Allocate(Size);
}

void operator delete(void * Src)
{
  GlobalMemoryAllocator.Deallocate(Src);
}

class Mem
{
public:
  int m_Data;
};

void Main()
{

Mem * p = new Mem;

        p->m_Data = 5;

        if (p->m_Data > 10)
        {
        p->m_Data = 100;
        }


       
  MessageBox(0, "Hello!", "MsgBox", 0);
 
  //Console Out;

  //Out.Write("Hello World!");
 
  ExitProcess(0);
}
Страницы: [1] 2 3 ... 10